-1

我正在使用 SQL Server、Python、pypyodbc。我有的表是:

tbl_User: id, owner

tbl_UserPhone: id, number, user_id

user_id 是 User 的主键和 UserPhone 的外键。我正在尝试使用 pypyodbc 将 2 部不同的手机插入同一个 user_id。这是我尝试过但不起作用的事情之一:

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()
4

2 回答 2

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]

这就是解决方案。

于 2016-04-15T07:59:55.967 回答
0

根据您的评论,您在 中有一个身份列tbl_UserPhones。根据列名,我猜它是ID列。

您得到的异常非常清楚 - 如果在插入语句之前没有专门设置identity_insert,您就无法将数据插入标识列。on基本上,弄乱身份列是不好的做法。最好让 Sql server 使用它的内置功能并自动处理对标识列的插入。

您需要将您的插入语句更改为不包含 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]
于 2016-04-10T04:36:52.563 回答