2017-03-31 1 views
0

so bekomme ich einen Fehler, dass keine eindeutige Constraint mit bestimmten Schlüsseln für eine meiner Tabellen übereinstimmt. Ich habe zwei Tabellen: Benutzer und Elemente, von denen wir eine Viele-zu-Eins-Beziehung haben (viele Elemente für einen Benutzer). Ich bin mit Flask-SQLAlchemy all dies zu tun:Kein eindeutiger Constraint Matching gegebene Schlüssel für referenzierte Tabelle "Benutzer" (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") 

die Tabellen zu erstellen, ich habe diese Aussage in meinem 'app.py':

@app.before_first_request 
    def create_database(): 
     print("Creating tables.") 
     db.create_all() 

Der Fehler ist: keine eindeutige Einschränkung passende Schlüssel für referenzierte Tabellenbenutzer.

Ich bin mir nicht sicher, wo ich falsch liege, da ich einen Fremdschlüssel in ItemModel habe, der mit dem Primärschlüssel in UserModel übereinstimmt. Irgendwelche Vorschläge/Tipps sind willkommen!

Danke.

+0

Kannst du bitte den Einzug des letzten Codes 'create_database()' korrigieren? Oder ist das in deinem Code so? –

+0

Entschuldigung, ich wollte die 'def' zurück um einen Tab einrücken. Ich habe es repariert. Eine interessante Sache, die ich bemerkte, ist, dass, wenn ich alles außer 'email' in 'UserModel' entfernte. Es hat gut geklappt, also versuche ich, dieses Problem zu umgehen. – Zain

+0

Verwenden Sie nicht Flask-SQLAlchemy, aber in SQL müssten Sie zunächst die Tabelle 'users' erstellen, bevor Sie eine weitere Tabelle mit einer FK-Einschränkung erstellen können, die darauf verweist. –

Antwort

0

Ich habe das tatsächlich zum Laufen gebracht - Wie Erwin Brandstetter oben erwähnte, trat der Fehler auf, weil Sie zuerst die Benutzertabellen erstellen müssen. In meinem Fall musste ich die Benutzertabelle hinsichtlich der Fremdschlüssel/Primärschlüssel-Beziehung auf Postgres selbst aktualisieren.

+0

Sie können Ihre eigene Antwort akzeptieren, also ist der Fall abgeschlossen. –

Verwandte Themen