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'
运行结果: