![](/img/trans.png)
[英]sqlalchemy schema: there is no unique constraint matching given keys for referenced table
[英]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.