简体   繁体   English

Flask-SQLAlchemy 多个数据库组成一个查询

[英]Flask-SQLAlchemy Multiple Databases to form a query

I am new to using Flask SQLAlchemy and I have a few questions on how can how can I link separate databases together to form a query.我是使用 Flask SQLAlchemy 的新手,我对如何将单独的数据库链接在一起以形成查询有几个问题。

I have 3 databases: User , Homework , Questions , where 1 user can have many homework and 1 homework can have many questions.我有 3 个数据库: UserHomeworkQuestions ,其中 1 个用户可以有很多作业,1 个作业可以有很多问题。 I have made 3 separate.py files for the 3 classes and each file calls simple functions like query.all(), and some simple filtering.我为 3 个类制作了 3 个单独的 .py 文件,每个文件都调用简单的函数,如 query.all() 和一些简单的过滤。

I have previously learned MySQL and I am wondering how can I create an SQLAlchemy equivalent of the following query:我以前学过 MySQL ,我想知道如何创建与以下查询等效的 SQLAlchemy:

SELECT * FROM user, homework, questions 
WHERE user.user_id = homework.user_id 
AND homework.homework_id = questions.homework_id

My question is how do I go about achieving this?我的问题是我如何实现这一目标? Do I make a new file and find a way to bind these databases together or is there a more optimal way of doing it?我是创建一个新文件并找到将这些数据库绑定在一起的方法,还是有更优化的方法?

Also, how do I go about retrieving aggregated function values?另外,我如何 go 关于检索聚合的 function 值? For instance, the average marks one would get for each homework.例如,每个作业的平均分数。

User.py用户.py

class User(db.Model):
    __tablename__ = 'user'
    user_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(20), nullable=False)

Homework.py作业.py

class Homework(db.Model):
    __tablename__ = 'homework'
    homework_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id= db.Column(db.Integer, nullable=False)
    subject = db.Column(db.String(20), nullable=False)

Question.py问题.py

class Question(db.Model):
    __tablename__ = 'question'
    question_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    homework_id = db.Column(db.Integer, nullable=False)
    marks = db.Column(db.Integer, nullable=False)

You can create relationships amongst your tables using the following您可以使用以下方法在表之间创建关系

class User(db.Model):
    __tablename__ = 'user'
    user_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(20), nullable=False)

class Homework(db.Model):
    __tablename__ = 'homework'
    homework_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), nullable=False)
    subject = db.Column(db.String(20), nullable=False)


class Question(db.Model):
    __tablename__ = 'question'
    question_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    homework_id = db.Column(db.Integer, db.ForeignKey('homework.homework_id'), nullable=False)
    marks = db.Column(db.Integer, nullable=False)

Then you can access info from a given table using the following insert your desired user_id in replace for xxx然后,您可以使用以下方法从给定表中访问信息,将所需的 user_id 替换为 xxx

user_object = User.query.filter_by(user_id=xxx).first()
username = user_object.username
user_id_value = user_object.user_id

homework_object = Homework.query.filter_by(user_id=user_id_value).first()
subject = homework_object.subject
homework_id_value = homework_object.homework_id

question_object = Question.query.filter_by(homework_id=homework_id_value).first()
marks = question_object.marks

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM