baz*_*ars 20 python sqlalchemy flask-sqlalchemy
我在flask-sqlalchemy中有一个典型的帖子/标签(许多标签与一个帖子相关),我想选择没有用我提供的列表中的任何标签标记的帖子.首先,我建立的模型:
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
tags = db.relationship('Tag', lazy='dynamic')
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text(50))
post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
Run Code Online (Sandbox Code Playgroud)
就像是
db.session.query(Post).filter(Post.tags.name.notin_(['dont','want','these']))
失败了
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Post.tags has an attribute 'name'
我假设是因为标签是关系而不是列.当我手动编写实际的SQL时,我在另一个项目上工作.这是有效的SQL:
SELECT * FROM $posts WHERE id NOT IN (SELECT post_id FROM $tags WHERE name IN ('dont','want','these'))
我如何使用sqlalchemy API实现这一目标?
van*_*van 25
非常直接使用否定any:
query = session.query(Post).filter(~Post.tags.any(Tag.name.in_(['dont', 'want', 'these'])))
Run Code Online (Sandbox Code Playgroud)
aIK*_*Kid 13
试试这个,很简单:
users = session.query(Post).filter(not_(Post.tags.name.in_(['dont', 'want', these'])))
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
这 notin_作品对我来说,调整的例子:
db.session.query(Post).filter(Post.tags.notin_(['dont','want','these']))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17118 次 |
| 最近记录: |