'Inserting with pyodbc in SQL Server table that has two columns as primary key

I am using pyodbc to insert a custom pricelist in SQL Server. My other queries work on the server, but I have difficulty with the following. When I use SQL Server Management Studio the values are nicely inserted:

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)

This code does not work in 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)""")

I get this error:

Traceback (most recent call last):

File "C:/dev/cijene/cijene.py", line 109, in
(id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) VALUES(13, 46642, 3.30, 1, 2.82)""")

pyodbc.IntegrityError: ('23000', u"[23000] [Microsoft][ODBC SQL Server Driver][SQL Server]Violation of PRIMARY KEY constraint 'PK_artikal_cijenovnik_cijena'. Cannot insert duplicate key in object 'dbo.artikal_cijenovnik_cijena'. (2627) (SQLExecDirectW); [23000] [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated. (3621)")

ODBC trace from SSMS:

cijene 155c-105c ENTER SQLExecDirect HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] "INSERT INTO abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) VALUES(13, 46642, 2.883, 1, 2.62)" SDWORD 156

cijene 155c-105c EXIT SQLExecDirect with return code 0 (SQL_SUCCESS) HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] "INSERT INTO abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) VALUES(13, 46642, 2.883, 1, 2.62)" SDWORD 156

ODBC Trace from python:

cijene 155c-105c ENTER SQLExecDirect HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] "INSERT INTO abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) VALUES(13, 46642, 2.883, 1, 2.62)" SDWORD 156

cijene 155c-105c EXIT SQLExecDirect with return code -1 (SQL_ERROR) HSTMT 00D91BA8 UCHAR * 0x00AEABB4 [ 156] "INSERT INTO abacus_raster.dbo.artikal_cijenovnik_cijena \ a (id_cijenovnik, id_artikal, cijena, order_id, cijena_nab) VALUES(13, 46642, 2.883, 1, 2.62)" SDWORD 156

DIAG [23000] [Microsoft][ODBC SQL Server Driver][SQL Server]Violation of PRIMARY KEY constraint 'PK_artikal_cijenovnik_cijena'. Cannot insert duplicate key in object 'dbo.artikal_cijenovnik_cijena'. (2627)

DIAG [01000] [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated. (3621)

This is how the table looks:

Table definition



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source