python - 多对多使用 foreign_keys 选项
问题描述
我需要在两个表之间创建多对多关系。我需要指定该foreign_keys
选项,因为我在两个表中都有其他相互引用。
直接使用关联表和对象Class
的声明尝试了多种方法。Table
当我删除foreign_keys
两个User and
Feature` 类上的选项时,它可以工作,但是当我添加具有这两个类之间映射的其他字段时,我得到多路径异常。
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
的 aFeature
时,出现以下错误:
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.
解决方案
我相信问题是我试图使用同一个表来存储多个绑定的多对多关联,例如特性测试用户、特性开发用户等。这当然是错误的。我需要使用第三列添加自定义 JOIN(例如添加新role
列)或为每个关联创建单独的表(这是我最后所做的)。
推荐阅读
- monitoring - 使用 influxdb-telegraf 和 grafana 监控接口
- java - 小的双重加法似乎在 Java 中不起作用
- c++ - 在 Qt 6 中获取 Metal 绘图上下文
- c# - 无法将 Interop Excel 与服务一起使用
- android - 一个 View 是否必须在 android 中只有一个 ViewModel?
- postgresql - 将@SecondaryTable 与休眠一起使用时插入速度较慢
- amazon-web-services - 我们如何允许内部用户访问 AWS 中的健康端点
- django - 没有将记录保存到 Django 中的 mongodb 数据库中,实际上我正在尝试在单个应用程序中探索多个不同的数据库(Postgresql、Mongodb)
- python - 当需要对 DataFrame 中的列进行大量更改时,替代 np.where
- javascript - 我无法使用 id 将值传递给summernote