[英]SQLAlchemy - relationship limited on more than just the foreign key
我有一个带有Page
和Revisions
的wiki db布局。 每个版本都有一个引用页面的page_id
,一个与引用页面的page
关系; 每个页面都与其所有修订版具有all_revisions
关系。 到目前为止很常见。
但是我想为页面实现不同的时期:如果页面被删除并重新创建,则新的修订版本将有一个epoch
。 为帮助找到正确的修订版,每个页面都有一个current_epoch
字段。 现在,我想在页面上提供仅包含其修订版本的revisions
关系,但仅包含与历元记录匹配的revisions
关系。
这就是我尝试过的:
revisions = relationship('Revision',
primaryjoin = and_(
'Page.id == Revision.page_id',
'Page.current_epoch == Revision.epoch',
),
foreign_keys=['Page.id', 'Page.current_epoch']
)
完整代码 (您可以按原样运行)
然而,这总是引发ArgumentError:无法确定主连接条件的关系方向......` ,我已经尝试了所有我想到的,它没有用。
我究竟做错了什么? 这样做是不是一个糟糕的方法,除了关系之外怎么办呢?
创建两个类后尝试安装关系:
Page.revisions = relationship(
'Revision',
primaryjoin = (Page.id==Revision.page_id) & \
(Page.current_epoch==Revision.epoch),
foreign_keys=[Page.id, Page.current_epoch],
uselist=True,
)
顺便说一句,您的测试不正确: revisions
属性在您尚未将数据添加到会话时从数据库加载数据。
更新 :代码中的问题是primaryjoin
参数不是字符串,因此不进行评估 。 在primaryjoin
使用string工作正常:
class Page(Base):
# [skipped]
revisions = relationship(
'Revision',
primaryjoin = '(Page.id==Revision.page_id) & '\
'(Page.current_epoch==Revision.epoch)',
foreign_keys=[id, current_epoch],
uselist=True,
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.