2016-07-06 7 views
0

Ich führe dieses Skript zum zweiten Mal aus (diese Tabellen existieren bereits) und erhalte einen Fremdschlüssel-Constraint-Fehler. Ich bin ein Anfänger in Sqlite3 und bin nicht in der Lage, die Ursache dahinter herauszufinden.Fremdschlüsseleinschränkung in Sqlite3 fehlgeschlagen

Schema.sql

PRAGMA foreign_keys = 1; 

drop table if exists user; 
create table user(uid integer primary key autoincrement, 
username text not null, 
password text not null, 
email text not null, 
isadmin integer default 0); 

drop table if exists asset; 
create table asset(aid integer primary key autoincrement, 
assetname text not null, 
releasedate text, 
owner integer default 0, 
isreserved integer default 0, 
foreign key(owner) references user(uid) on delete set default); 

lese ich diese Datei in einem Python-Skript.

Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "main.py", line 37, in create_table 
    conn.cursor().executescript(f.read()) 
sqlite3.IntegrityError: foreign key constraint failed 
+0

Funktioniert für mich. Enthalten Ihre Tabellen Daten? –

+0

Ja, hat das den Fehler verursacht? –

Antwort

0

Wenn Sie eine Tabelle löschen, ist der Effekt der gleiche wie wenn Sie alle Zeilen löschen würden, und diese Löschungen können fehlschlagen.

Lassen Sie alle Tabellen zuerst und in der richtigen Reihenfolge (asset zuerst) fallen.

-1

Sie setzen Besitzer, der Text ist, als Fremdschlüssel. Versuchen Sie es als Ganzzahl festzulegen.

+0

Ich habe es geändert, bekomme immer noch den gleichen Fehler. –

+0

Seltsam, weil es auf meiner Maschine funktioniert. Haben Sie versucht, die Datenbank erneut zu erstellen? – alexpeits