簡體   English   中英

SQLAlchemy - 關系不僅限於外鍵

[英]SQLAlchemy - relationship limited on more than just the foreign key

我有一個帶有PageRevisions的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM