我有2个表,User
并且Object
具有一对多的关系(User
可以有很多objects
).
如何以符合pep8的方式过滤具有至少一个对象的用户?
此代码有效,但不符合pep8:
query = session.query(User.id)
query = query.filter(User.objects != None)
Run Code Online (Sandbox Code Playgroud)
文档提到使用isnot
:http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#common-filter-operators
但是以下代码会导致未实现的错误.
query = session.query(User.id)
query = query.filter(User.objects.isnot(None))
Run Code Online (Sandbox Code Playgroud)
正如您所指出的,isnot
不是为关系实现的,而是仅针对简单列.
至于关系,有一个更普遍的更强大的构造any(criterion, ...)
.
在您的情况下,您可以编写下面符合PEP8的代码,它将与SQL
您的问题完全相同:
q = session.query(User.id)
q = q.filter(User.objects.any())
Run Code Online (Sandbox Code Playgroud)
但它也允许您执行更复杂的查询,例如:return Users,其中没有以下对象value > 100
:
q = session.query(User.id)
q = q.filter(~User.objects.any(Object.value > 100))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2905 次 |
最近记录: |