如何在SQLAlchemy中指定一个条件,其中一个条件要求列为空?

Jes*_*lon 3 python sqlalchemy foreign-key-relationship

不确定这个问题的正确标题应该是什么.我有以下架构:

  • 事项与WorkItems有一对多的关系.
  • WorkItem与LineItems有一对一(或一零)的关系.

我试图在Matters和WorkItems之间创建以下关系

Matter.unbilled_work_items = orm.relation(WorkItem,
  primaryjoin = (Matter.id == WorkItem.matter_id) and (WorkItem.line_item_id == None),
  foreign_keys = [WorkItem.matter_id, WorkItem.line_item_id],
  viewonly=True
)
Run Code Online (Sandbox Code Playgroud)

抛出:

AttributeError: '_Null' object has no attribute 'table'
Run Code Online (Sandbox Code Playgroud)

这似乎是说,primaryjoin中的第二个子句返回一个类型为_Null的对象,但它似乎期待具有"table"属性的东西.

这似乎对我来说应该是非常简单的,我错过了一些明显的东西吗?

更新

答案是将primaryjoin线路更改为:

primaryjoin = "and_(Matter.id == WorkItem.matter_id, WorkItem.line_item_id == None)"
Run Code Online (Sandbox Code Playgroud)

Thi*_*ter 6

尝试使用and_as andnot not overloaded:

and_((Matter.id == WorkItem.matter_id), (WorkItem.line_item_id == None))
Run Code Online (Sandbox Code Playgroud)