2017-03-31 78 views
0

所以我得到一個錯誤,沒有唯一的約束與我的表之一的給定鍵匹配。我有兩個表:用戶和項目,其中我們有一個多對一的關係(一個用戶的許多項目)。我現在用的燒瓶的SQLAlchemy做這一切:沒有唯一的約束與參考表「用戶」(PostgreSQL)的給定鍵匹配

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中的主鍵相匹配的外鍵,所以我不確定我要去哪裏出錯。任何建議/提示,歡迎!

謝謝。

+0

你可以修改最後一個代碼'create_database()'的縮進嗎?或者它是如何在你的代碼? –

+0

對不起,我打算通過一個選項卡縮進'def'。我修好了它。 我注意到的一件有趣的事是,當我刪除'UserModel'中的'email'以外的所有內容。它工作得很好,所以我試圖解決這個問題。 – Zain

+0

不使用Flask-SQLAlchemy,但在SQL中,必須首先創建表'users',然後才能使用FK約束創建另一個表並引用它。 –

回答

0

我確實得到了這個工作 - 正如Erwin Brandstetter上面提到的那樣,發生錯誤是因爲您需要首先創建用戶表。就我而言,我需要根據Postgres本身的外鍵/主鍵關係更新用戶表。

+0

您可以接受您自己的答案,因此案件已關閉。 –

相關問題