繁体   English   中英

没有与引用表“用户”的给定键匹配的唯一约束(PostgreSQL)

[英]No unique constraint matching given keys for referenced table “users” (PostgreSQL)

所以我得到一个错误,没有唯一约束匹配我的一张桌子的给定键。 我有两个表:“用户”和“项目”,其中我们有多对一的关系(一个用户有许多项目)。 我正在使用Flask-SQLAlchemy来完成所有这些工作:

    class ItemModel(db.Model):
        __tablename__ = 'items'

        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(40))
        description = db.Column(db.String(80))
        price = db.Column(db.Float(precision=2))
        emailAddress = db.Column(db.String(40), db.ForeignKey('users.email'))

    class UserModel(db.Model):

        __tablename__ = 'users'

        id = db.Column(db.Integer)
        email = db.Column(db.String(40), primary_key=True)
        name = db.Column(db.String(40))
        last_name = db.Column(db.String(40))

        items = db.relationship('ItemModel', lazy="dynamic")

为了创建表,我在“ app.py”中添加了以下语句:

    @app.before_first_request
    def create_database():
        print("Creating tables.")
        db.create_all()

错误是:没有唯一的约束与引用表用户的给定键匹配。

我不确定在哪里出错,因为ItemModel中有一个外键与UserModel中的主键匹配。 欢迎任何建议/提示!

谢谢。

实际上,我确实可以使用它-正如上述的Erwin Brandstetter所述,发生此错误是因为您需要首先创建用户表。 就我而言,我需要根据Postgres本身上的外键/主键关系来更新用户表。

为了避免有人到这里来,但他们以不同的方式构造代码,例如说每个实体都在其自己的文件中,请在调用.create_all()方法之前检查导入顺序。

这是我想解决您遇到的餐桌订购问题的方式:

table_names = ['users',
               'items']

for table in table_names:
    t = db.Model.metadata.tables[table]
    t.create(bind=engine)

暂无
暂无

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

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