sqlalchemy外键的正向查询与反向查询(一对多)

sqlalchemy数据库外键中的正向引用与反向引用

父表:被引用方的表
子表:引用父表的表(表中有父表的字段,一般是父表id,并且定义relationship)

正向查询:在子表中,查询父表的信息
反向查询:通过父表,查询子表的信息

定义父表:

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

定义子表:

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', backref=db.backref('articles'))

注意:db.backref是反向查询,在User表中需要引用后面的参数“articles”,如user.articles即可拿到User对应的Article,数据格式是列表。

示例:

    def get(self):

        # 正向查询
        article=Article.query.filter_by(id=1).first()
        print('文章标题:',article.title)
        print('该文章的作者:',article.author.username)

        # 反向查询
        user=User.query.filter_by(id=1).first()
        print('username:',user.username)
        print('该作者对应的文章:',user.article)
        return 'ok'

运行结果:

备注:对于多对多的情况,需要建立一个外键表。

猜你喜欢

转载自blog.csdn.net/weixin_38664232/article/details/112982641