【发布时间】:2020-05-30 01:04:53
【问题描述】:
我使用复合主键创建了一个 SQLAlchemy 多对多关系。因此,三个表之间的外键也是复合的。其中一个主键列是共享的。它必须具有相同的值。 我使用的代码似乎有效,但是我现在确实收到警告说:relationship 'A.bs' will copy column B.group to column A_B.group,这与关系冲突:'A.bs '(将 Ab 复制到 A_B.group)。考虑将 viewonly=True 应用于只读关系,或提供一个primaryjoin 条件,使用foreign() 注释标记可写列。
class A(Model):
group = Column(Int, primary_key=True)
id = Column(Int, primary_key=True)
bs = relationship('B', secondary=Table('A_B',
Column('group', Int, primary_key=True),
Column('a', Int, primary_key=True),
Column('b', Int, primary_key=True),
ForeignKeyConstraint(['group', 'a'], ['A.group', 'A.id']),
ForeignKeyConstraint(['group', 'b'], ['B.group', 'B.id'])
))
class B(Model):
group = Column(Int, primary_key=True)
id = Column(Int, primary_key=True)
我无法将关系设置为仅查看。如何修改我的代码以使其在没有警告的情况下工作?
【问题讨论】:
-
所以无法解决警告并仍然使用“次要”参数? “重复”解决方案使用了一个有问题的附加表。
-
我不明白为什么你不能使用辅助,你只需要通知 SQLA 它可以根据关系修改或不能修改什么,并传递一个明确的
primaryjoin和secondaryjoinwith annotations 是一种方法。也许这与一对多的情况有很大的不同,以至于副本没有足够清楚地覆盖它。
标签: python sql postgresql sqlalchemy