Python sqlalchemy在插入多对多记录时未显示列错误

Python sqlalchemy在插入多对多记录时未显示列错误,python,sqlalchemy,many-to-many,flask-sqlalchemy,Python,Sqlalchemy,Many To Many,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.backre

我在炼金术模型中定义了以下多对多关系:

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') 
模块_课程表对象定义为:

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关系中删除primaryjoinsecondaryjoin行并使用此方法时,我不会遇到相同的错误,数据也会被插入

为什么包含主联接条件和次联接条件会导致insert中断?是否有其他方法可以将数据插入到多对多关系中,我应该使用这些方法?

在此代码中:

modules = db.relationship('Module', secondary=course_modules,
    primaryjoin=(course_modules.c.course_id == id),  
    secondaryjoin=(course_modules.c.module_id == id),
id
在primaryjoin和secondaryjoin中,由于Course.id的作用域,join引用。您应该明确引用正确的
id
列,例如:

modules = db.relationship('Module', secondary=course_modules,
    primaryjoin=(course_modules.c.course_id == Course.id),  
    secondaryjoin=(course_modules.c.module_id == Module.id),

有没有可能在这个问题上再扩展一点?我不太明白身份证被错误引用的地方。这样更好吗?为什么投反对票?这为我解决了问题。好的,它会在使用正在定义的类名限定的id上给出一个错误——在给定的示例中,
Course.id
——但该id不需要限定。