2016-04-09 16 views
-1

Ich benutze SQL Server, Python, pypyodbc. Die Tabellen I haben, sind:Einfügen von Daten in eine Tabelle mit demselben Fremdschlüsselwert

tbl_User: id, owner 

tbl_UserPhone: id, number, user_id 

User_id der Primärschlüssel der Benutzer ist und der Fremdschlüssel von UserPhone. Ich versuche, 2 verschiedene Telefone mit pypyodbc zur gleichen user_id einzufügen. Dies ist eines der Dinge, die ich versuchte, die nicht funktionierten:

cursor = connection.cursor() 
SQLCommand = ("INSERT INTO tbl_UserPhones" 
        "(id,number,user_id)" 
        " VALUES (?,?,?)") 
values = [userphone_index, user_phone,"((SELECT id from tbl_User where id = %d))" % user_id_index] 
cursor.execute(SQLCommand, values) 
cursor.commit() 
+0

Können Sie bitte erklären 'hat nicht funktioniert'? Haben Sie einen Fehler erhalten? Brauchen Sie weitere Informationen –

+0

Nein, es übersprungen nur die cursor.commit() Zeile. soll es funktionieren? –

+0

Wenn ich Sie wäre, würde ich Python verwenden, um den SQLCommand auszugeben, und dann versuchen, diesen Befehl in eine Konsole für SQL Server (wie Management Studio) einzufügen, um festzustellen, um welchen Fehler es sich handelt. Ich würde vermuten, dass Ihre tbl_UserPhones Tabelle definiert ist, aber es ist unmöglich, ohne weitere Informationen zu wissen. –

Antwort

0

Basierend auf Ihre Kommentare, Sie eine Identitätsspalte in tbl_UserPhones haben. Basierend auf den Spaltennamen vermute ich, dass es die ID Spalte ist.

Die Ausnahme, die Sie erhalten, ist sehr klar - Sie können keine Daten in eine Identity-Spalte einfügen, ohne identity_insert vor Ihrer Insert-Anweisung auf on zu setzen. Im Grunde ist das Herumspielen mit Identitätssäulen eine schlechte Übung. Es ist besser, den Sql-Server die eingebauten Funktionen verwenden zu lassen und die Einfügung in die Identitätsspalte automatisch durchzuführen.

Sie benötigen eine Insert-Anweisung ändern, nicht die id-Spalte enthalten:

Statt

SQLCommand = ("INSERT INTO tbl_UserPhones" 
       "(id,number,user_id)" 
       " VALUES (?,?,?)") 
values = [userphone_index, user_phone,"((SELECT id from tbl_User where id = %d))" % user_id_index] 

try this:

SQLCommand = ("INSERT INTO tbl_UserPhones" 
       "(number,user_id)" 
       " VALUES (?,?)") 
values = [user_phone,"((SELECT id from tbl_User where id = %d))" % user_id_index] 
0
SQLCommand = ("INSERT INTO tbl_UserPhones" 
       "(id,number,user_id)" 
       " VALUES (?,?,?)") 
user_sqlCommand = cursor.execute("(SELECT id FROM tbl_User WHERE id = %d)" % user_index).fetchone()[0] 
values = [userphone_index, user_phone, user_sqlCommand] 

Dies war die Lösung.

Verwandte Themen