【发布时间】:2018-07-28 21:10:24
【问题描述】:
我的 flask-sqlalchemy 模型中定义了以下多对多关系:
class Course:
...
modules = db.relationship('Module', secondary=course_modules,
primaryjoin=(course_modules.c.course_id == id),
secondaryjoin=(course_modules.c.module_id == id),
backref=db.backref('courses', lazy='dynamic'), lazy='dynamic')
而module_course表对象定义为:
course_modules=db.Table('course_modules',
db.Column('course_id', db.Integer, db.ForeignKey('course.id')),
db.Column('module_id', db.Integer, db.ForeignKey('module.id'))
)
执行以下操作以在此表中创建记录时,我得到一个 sqlalchemy.orm.exc.UnmappedColumnError:
module = module_service.get_by_id(1) # returns a Module instance
course.modules = [module] # course being a Course instance
course.modules.all()
sqlalchemy.orm.exc.UnmappedColumnError: Can't execute sync rule for
source column 'course.id'; mapper 'Mapper|Module|module' does not map
this column. Try using an explicit `foreign_keys` collection which
does not include destination column 'course_modules.module_id'
(or use a viewonly=True relation).
当我从 db 关系中删除 primaryjoin 和 secondaryjoin 行并使用此方法时,我不会遇到相同的错误,并且确实插入了数据。
为什么包含主要和次要连接条件会导致插入中断?是否有其他方法可以将数据插入到我应该使用的多对多关系中?
【问题讨论】:
标签: python sqlalchemy many-to-many flask-sqlalchemy