【问题标题】:sqlalchemy.exc.NoForeignKeysErrorsqlalchemy.exc.NoForeignKeysError
【发布时间】:2021-07-18 18:55:27
【问题描述】:

我使用flask-SQLAlchemy 创建数据库,但出现此错误:

"sqlalchemy.exc.NoForeignKeysError sqlalchemy.exc.NoForeignKeysError:无法确定关系 User.refund 上的父/子表之间的连接条件 - 没有链接这些表的外键。确保引用列与 ForeignKey 或 ForeignKeyConstraint 相关联,或指定 'primaryjoin' 表达式。"

我有一个User 模型架构定义为:

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    password_hash = db.Column(db.String(128))
    confirmed = db.Column(db.Boolean, default=False)
    name = db.Column(db.String(64))
    location = db.Column(db.String(64))
    about_me = db.Column(db.Text())
    member_since = db.Column(db.DateTime(), default=datetime.utcnow)
    last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
    avatar_hash = db.Column(db.String(32))
    posts = db.relationship('Post', backref='author', lazy='dynamic')
    
    comments = db.relationship('Comment', backref='author', lazy='dynamic')
    purchases = db.relationship("Purchase", backref='author', lazy='dynamic')
    refund = db.relationship("Refund", backref='author', lazy='dynamic')

class Refund(db.Model):
    __tablename__ = "Refund"
    id = db.Column(db.Integer, primary_key=True)
    purchase_id = db.Column(db.Integer, db.ForeignKey("Purchase.id"))
    medicine_id = db.Column(db.Integer, db.ForeignKey("inventory.medicine_id"))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)

为什么会出现这个错误?

【问题讨论】:

  • 您在db.relationship() 调用中看到了其他表。 Refund 模型与User 表正确关联。因此,您遇到的错误很可能源于您如何创建与其他模型之间的关系。
  • 也许您希望在Refund 模型中对users 进行FK?

标签: python sqlalchemy


【解决方案1】:

因为对于db.ForeignKey("Purchase.id"),您的数据库中实际上需要有一个外键连接。导致此错误是因为在您的数据库中没有任何外键链接到主键(或不正确),因此您必须修复数据库中的表。

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2017-11-26
    • 2021-08-04
    相关资源
    最近更新 更多