我創建了以下模型:
tag_post = db.Table('tag_post',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True),
db.Column('post_id', db.Integer, db.ForeignKey('post.id'), primary_key=True))
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(180))
body = db.Column(db.Text, nullable=False)
tags = db.relationship('Tag', secondary=tag_post, backref=db.backref('posts_associated', lazy="dynamic"))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
posts = db.relationship('Post', backref='author', lazy='dynamic')
如何使用 tag.id 查詢所有帶有標簽的帖子?
提前致謝
uj5u.com熱心網友回復:
解決方案是使用連接。
您想要所有滿足條件的帖子。因此,查詢應該從表開始Post。
Post.query
然后使用應該適合的兩列將表格帖子與連接表格系結。在這種情況下,列post_id在tag_post表中,并id在Post表中。由于您直接使用關聯表,因此使用名稱通過屬性參考所使用的列c。
Post.query\
.join(tag_post, tag_post.c.post_id == Post.id)
然后根據您的條件過濾連接表的第二列。
tag_id = 1
Post.query\
.join(tag_post, tag_post.c.post_id == Post.id)\
.filter(tag_post.c.tag_id == tag_id)
由于您想要所有帖子而不僅僅是一個帖子,因此請使用all().
tag_id = 1
tagged_posts = Post.query\
.join(tag_post, tag_post.c.post_id == Post.id)\
.filter(tag_post.c.tag_id == tag_id)\
.all()
以下是具有相同結果的詳細查詢,其中還包括第三個表。
tag_id = 1
tagged_posts = Post.query\
.join(tag_post, tag_post.c.post_id == Post.id)\
.join(Tag, tag_post.c.tag_id == Tag.id)\
.filter(Tag.id == tag_id)\
.all()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/339951.html
標籤:烧瓶 烧瓶-sqlalchemy
