【问题标题】:Mapper fails to locate foreign keys on secondary table (Many to many relationship)映射器无法在辅助表上找到外键(多对多关系)
【发布时间】:2019-05-30 06:31:26
【问题描述】:

我正在尝试使用 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'。

【问题讨论】:

    标签: flask flask-sqlalchemy


    【解决方案1】:

    这可能是因为您定义的是db.table,而不是db.Table。否则,需要检查其他一些事项:

    • 因为您没有为每个表指定 __tablename__ =,所以请检查表的名称是否符合您的预期,例如permit & user.
    • 您可以使用relationship()primaryjoin 参数手动指定连接条件,它允许您提供SQL 来确定连接

    【讨论】:

    • 非常感谢,原来如此。它应该是 db.Table(大写“T”)。看屏幕的时间太多=D
    【解决方案2】:

    对不起,你们。看代码行的时间太多。原来我正在实例化 db.table('user permit'..... 而不是 db.Table (大写 T)

    谢谢。

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 2012-11-23
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      相关资源
      最近更新 更多