我有一个带有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:无法确定主连接条件的关系方向......` ,我已经尝试了所有我想到的,它没有用。

我究竟做错了什么? 这样做是不是一个糟糕的方法,除了关系之外怎么办呢?

#1楼 票数:4 已采纳

创建两个类后尝试安装关系:

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,
    )

  ask by Marian translate from so

未解决问题?本站智能推荐:

1回复

定义 FK 和子关系时的交叉引用 SQLAlchemy

每个类都在一个文件中,为了 FK 目的在 BedAssignment 类中引用 Guest,然后为了关系目的而引用 BedAssignment 会创建一个交叉引用。 我尝试使用文本版本的 FK 或关系引用,类似于: Column(Integer, ForeignKey("bed.id")但它似
1回复

如何在 SQLAlchemy 中正确定义多对多关系?

在我的Flask应用程序中,我使用的是SQLAlchemy ,所有表都在一个文件models.py中定义: training_ids_association_table = db.Table( "training_ids_association", db.Model.metadata
2回复

SQLAlchemy使用Relationship()

我在这里使用SQLAlchemy,试图制作几个表并将它们链接起来,但在实现此功能时遇到了问题。 我将其放在一个用于创建表的文件中。 然后在另一个文件中,我使用insert()函数将值放入两个表中。 我想如果我有一个拥有espn_team_id 360的团队,然后将多个游戏放入具有h_
1回复

Flask + SqlAlchemy 从另一个类属性中检索一个类对象

我建立一个flask使用的应用程序SqlAlchemy ,我想找回author从Notification对象从Notification对象本身,而不是分析所有User s到一个template ,以捕捉author的数据。 这是我的模型: 在app/models.py 在我的路线中,我总是将
1回复

sqlalchemy通过comment_articles表对与文章相关的一层嵌套的注释进行计数

现在,我使用下面的方法来获取与文章相关的评论计数。 但是当我在文章中有N条评论时,这太冒险了。 如何在sqlalchemy中一次嵌套一次计数计数注释? PS Comment不仅用于Article模型,还用于其他模型(Project,Page,Something ..) 和评论有关的
1回复

sqlalchemy中复合外键上的多个关系

我正在尝试创建一个边缘类型类来链接两个节点。 每个节点本身就是一个类,并且节点和边都应该是同一图的一部分。 我不断 即使定义了外键。 我尝试在节点表edges关系上定义外键,但得到的结果相同。 有人可以告诉我这个例子有什么问题吗?
1回复

SQLalchemy中的双重关系

我在sqlalchemy中遇到以下问题。 我在sqlite中制作了三个不同的表,第一个没有空间,第二个与第一个有关系,第三个与第二个有关系。 因此,当我想在第一张表和第二张表中插入内容时,一切正常。 当我想在第三张表中插入数据时,我会遇到麻烦,就像教程中介绍的那样 。 这是我的三个表的代
1回复

通过外键的SQLAlchemy参考列

如果我有一个operator表和user表,我有一个以上的关系,在user中的表格operator ,其中pm是relationship()上加入operator.pm_id == user.id和sales是一个relationship()是加入operator.sales_id == use