我需要在两个表之间创建多对多关系。我需要指定foreign_keys
选项,因为在两个表中我都互相引用。
使用Class
声明关联表和直接使用Table
对象尝试了多种方法。
当我在两个foreign_keys
Feature`类上都删除了User and
选项时,它可以工作,但是当我在这两个类之间添加具有映射关系的其他字段时,就会收到“多路径”异常。
feature_user = Table(
'feature_user',
Base.metadata,
Column('feature_id', Integer, ForeignKey('features.id')),
Column('user_id', Integer, ForeignKey('users.id')),
)
class Feature(Base):
__tablename__ = 'features'
id = getIdColumn()
# other fields...
cpm_engineers = relationship(
'User',
secondary=feature_user,
foreign_keys=[feature_user.columns.user_id],
back_populates='cpm_engineer_of',
)
class User(Base):
__tablename__ = 'users'
id = getIdColumn()
# other fields...
cpm_engineer_of = relationship(
'Feature',
secondary=feature_user,
foreign_keys=[feature_user.columns.feature_id],
back_populates='cpm_engineers',
)
在创建User
中的新Feature
时,出现以下错误:
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Feature.cpm_engineers - there are no foreign keys linking these tables via secondary table 'feature_user'. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify 'primaryjoin' and 'secondaryjoin' expressions.
答案 0 :(得分:0)
我认为问题是我试图使用同一表存储多个绑定的多对多关联,例如功能测试者用户,功能开发者用户等。这当然是错误的。我需要使用第三列添加自定义JOIN(例如,添加新的role
列)或为每个关联创建一个单独的表(这是我最后所做的事情)。