我正在使用 pyodbc 在 SQL Server 中插入自定义价目表。我的其他查询在服务器上运行,但我在以下方面遇到困难。当我使用 SQL Server Management Studio 时,值会很好地插入:
INSERT INTO abacus_raster.dbo.artikal_cijenovnik_cijena (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab)
VALUES (13, 46642, 3.30, 1, 2.82)
此代码在 pyodbc 中不起作用:
import pyodbc
cnxn = pyodbc.connect('Driver={SQL Server};'
'Server=SERVER;'
'Database=abacus_raster;'
'Trusted_Connection=yes;')
cursor = cnxn.cursor()
cursor.execute("""INSERT INTO abacus_raster.dbo.artikal_cijenovnik_cijena
(id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) VALUES(13, 46642, 3.30, 1, 2.82)""")
我收到此错误:
回溯(最近一次调用最后一次):
文件“C:/dev/cijene/cijene.py”,第 109 行,位于
(id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) 值(13, 46642, 3.30, 1, 2.82)""")pyodbc.IntegrityError: ('23000', u"[23000] [Microsoft][ODBC SQL Server Driver][SQL Server]违反主键约束'PK_artikal_cijenovnik_cijena'。无法在对象'dbo.artikal_cijenovnik_cijena'中插入重复的键。( 2627) (SQLExecDirectW); [23000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]语句已终止。(3621)")
来自 SSMS 的 ODBC 跟踪:
cijene 155c-105c ENTER SQLExecDirect HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] “插入 abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) 值(13, 46642, 2.883, 1, 2.62)” SD字156
cijene 155c-105c 退出 SQLExecDirect,返回代码 0 (SQL_SUCCESS) HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] “插入 abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) 值(13, 46642, 2.883, 1, 2.62)” SD字156
来自 python 的 ODBC 跟踪:
cijene 155c-105c ENTER SQLExecDirect HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] “插入 abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) 值(13, 46642, 2.883, 1, 2.62)” SD字156
cijene 155c-105c 退出 SQLExecDirect,返回代码 -1 (SQL_ERROR) HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] “插入 abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) 值(13, 46642, 2.883, 1, 2.62)” SD字156
DIAG [23000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]违反主键约束“PK_artikal_cijenovnik_cijena”。无法在对象“dbo.artikal_cijenovnik_cijena”中插入重复的键。 (2627)
DIAG [01000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]语句已终止。 (3621)
这就是桌子的样子: