1. 程式人生 > 其它 >sqlalchemy外來鍵的正向查詢與反向查詢(一對多)

sqlalchemy外來鍵的正向查詢與反向查詢(一對多)

技術標籤:Python

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'

執行結果:

備註:對於多對多的情況,需要建立一個外來鍵表。