繁体   English   中英

Flask-SqlAlchemy 复合键一对多关系 Sql 服务器

[英]Flask-SqlAlchemy composite key one to many relationship Sql Server

我目前遇到错误,我正在使用 sql 服务器并尝试 model 一个简单的父级,其中包含一组子级:

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

我的课程设置如下:

class Parent(db.Model):
    __tablename__ = "parent"
    parentId = db.Column(db.Integer, primary_key=True)
    parentVersion = db.Column(db.Integer, primary_key=True)
    children = db.relationship('Child', backref="parent",lazy=True)


class Child(db.Model):
    __tablename__ = "child"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(512), nullable=False)

    parentId = db.Column(db.Integer, nullable=False)
    parentVersion = db.Column(db.Integer, nullable=False)
    ForeignKeyConstraint(['parentId', 'parentVersion'], ['parent.parentId', 'parent.parentVersion']

我尝试过以多种方式声明关系和外键,但总是出错,正确的方法是什么?

您忘记添加外键:

parentId = db.Column(db.Integer, db.ForeignKey("parent.id))

如果您还有什么不清楚的地方,有很多关于这个主题的文档资料

您缺少将 ForeignKeyConstraint 添加到表 args 中,并且您使用的是骆驼案例,而不是蛇案例。 而且你不需要__tablename__和 Flask-SQLAlchemy。

尝试:

class Parent(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    version = db.Column(db.Integer, primary_key=True)
    children = db.relationship('Child', backref="parent", lazy=True)

class Child(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(512), nullable=False)

    parent_id = db.Column(db.Integer, nullable=False)
    parent_version = db.Column(db.Integer, nullable=False)
    __table_args__ = (
    db.ForeignKeyConstraint(
            ['parent_id', 'parent_version'],
            ['parent.id', 'parent.version']
        ),
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM