2017-03-31 3 views
0

の指定されたキーに一致する一意の制約がないため、テーブルのいずれかのキーに固有の制約が一致しないというエラーが発生します。私は2つのテーブルを持っています:ユーザとアイテム、それに多対1の関係(1人のユーザにとっては多くのアイテム)があります。私はこのすべてを行うにフラスコSQLAlchemyのを使用しています:テーブルを作成するには参照されたテーブル "users"(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() 

エラーがある:なしユニーク制約参照されたテーブルユーザのために与えられたキーと一致する。

UserModelの主キーと一致する外部キーがItemModelにあるため、どこが間違っているのかわかりません。どんな提案/ヒントも大歓迎です!

ありがとうございました。

+0

最後のコード 'create_database()'のインデントを修正できますか?それともあなたのコードの中にあるのでしょうか? –

+0

申し訳ありませんが、私は「def」を1つのタブでインデントすることを意味していました。それを私が直した。 私が注目した興味深いものは、「UserModel」の「電子メール」を除いてすべてを削除したときです。それは正常に機能したので、私はその問題を回避しようとしています。 – Zain

+0

Flask-SQLAlchemyを使用していませんが、SQLでは、まず 'users'テーブルを作成しなければなりません。 –

答えて

0

私は実際にこれを動作させました。Erwin Brandstetterが前述したように、まずユーザーテーブルを作成する必要があるためエラーが発生しました。私の場合は、Postgres自体の外部キー/主キーの関係でuserテーブルを更新する必要がありました。

+0

あなた自身の答えを受け入れることができるので、ケースは閉じています。 –

関連する問題