![](/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.