我试图使用flask-SQLAlchemy描述一个简单的“多对多”关系,但是,即使正确定义了映射器,映射器似乎也找不到辅助表上的外键。
我正在使用最新版本的OS flask-SQLAlchemy(2.4)和SQLite。我已经尝试了许多代码变体,但一无所获。怀疑并不能帮助= /
user_permit = db.table('userpermit',
db.Column('permit_id', db.Integer, db.ForeignKey('permit.permit_id'), primary_key=True),
db.Column('user_mail', db.String(128), db.ForeignKey('user.user_mail'), primary_key=True)
)
class User(db.Model):
user_mail = db.Column(db.String(128), primary_key=True)
[...]
permits = db.relationship('Permit', secondary=user_permit, backref='users_permitted')
class Permit(db.Model):
permit_id = db.Column(db.Integer, primary_key=True)
我总是收到相同的错误消息:NoForeignKeysError:无法确定关系User.permits的父/子表之间的联接条件-没有通过外部表''链接这些表的外键。确保引用列与ForeignKey或ForeignKeyConstraint关联,或指定“ primaryjoin”和“ secondaryjoin”表达式。
似乎无法识别我的辅助表,因为它说的是“”,而不是“ userpermit”。
答案 0 :(得分:0)
可能是因为您在定义db.table
,而不是db.Table
。否则,需要检查其他几件事:
__tablename__ =
,因此请检查表名是否符合您的期望,例如permit
和user
。relationship()
的{{3}}参数来手动指定连接条件,该参数允许您提供SQL来确定连接答案 1 :(得分:0)
对不起,你们。看代码行的时间太多。原来我正在实例化db.table('用户许可'.....而不是db.Table(大写T)
谢谢。