簡體   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