使用 pyodbc 插入具有两列作为主键的 SQL Server 表中

问题描述 投票:0回答:1

我正在使用 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)

这就是桌子的样子:

python sql primary-key pyodbc
1个回答
0
投票

确保 pyodbc '用户'在访问数据库时具有足够的有效数据库权限。当权限不足时,PYDBC 会抛出神秘的 T-SQL 错误。最积极的选项是包含 sysadmin 服务器角色: SSMS snippet

© www.soinside.com 2019 - 2024. All rights reserved.