2016-04-09 7 views
-1

Я использую SQL Server, Python, pypyodbc. таблицы У меня есть следующие:Вставка данных в таблицу с использованием того же значения внешнего ключа

tbl_User: id, owner 

tbl_UserPhone: id, number, user_id 

user_id является первичным ключом пользователя и внешний ключ UserPhone. Я пытаюсь вставить 2 разных телефона в тот же user_id, используя pypyodbc. Это одна из вещей, которые я пробовал, которые не работали:

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

Не могли бы вы объяснить, что «не работает»? Вы получили сообщение об ошибке? Нужно больше информации –

+0

Нет, он просто пропустил строку cursor.commit(). он должен работать? –

+0

Если бы я был вами, я бы использовал Python для печати SQLCommand, а затем попробуйте вставить эту команду в консоль для SQL Server (например, Management Studio), чтобы узнать, что такое ошибка. Я бы предположил, что именно так определена ваша таблица tbl_UserPhones, но это невозможно узнать без дополнительной информации. –

ответ

0

на основе ваших комментариев, у вас есть столбец идентификаторов в tbl_UserPhones. Основываясь на именах столбцов, я предполагаю, что это столбец ID.

Исключением, которое вы получаете, очень ясно - вы не можете вставлять данные в столбец идентификации, не устанавливая при этом identity_insert в on перед заявлением о вставке. В принципе, беспорядок с колонками идентичности - плохая практика. лучше позволить серверу Sql использовать встроенные возможности и автоматически обрабатывать вставку в столбец идентификатора.

Вы должны изменить вставки заявление не содержит столбец ID:

Вместо

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] 

попробовать это:

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] 

Это было решение.