Python pyODBC:使用标识列插入带有sql server表的问题

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

使用Python创建的INSERT语句在执行和提交时给出了错误。我从Python中获取了该语句的副本,并在SQL SERVER中自己运行它并且在那里工作正常。我试图插入的表有一个标识列。当Python试图执行它时会给我一个错误,说明当我在语句中排除标识列时,下面是什么

表看起来像这样MY_TABLE(ID INT IDENTITY(1,1)NOT NULL,A INT,B INT)

INSERT INTO MY_TABLE (A, B) VALUES(VALUE_A, VALUE_B);

“('23000',”[23000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无法将值NULL插入列'MY_IDENTITY_COLUMN',表'MY_TABLE';列不允许空值.INSERT失败。(515 )(SQLExecDirectW); [23000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]语句已终止。(3621)“)”

但是当我尝试包含Identity列的值(我不想这样做)时,我得到以下错误,这是有意义的,因为它是一个标识列,我们让表自动递增

“当IDENTITY_INSERT设置为OFF时,无法在表'MY_TABLE'中为标识列插入显式值。”

当我在SQL SERVER中运行查询时,表填充标识列本身的值并自动递增但由于某种原因,当我在Python中运行该语句时,它不会执行此操作并尝试传递NULL

SQL SERVER版本:10.50.6560.0

sql sql-server python-3.x pyodbc
1个回答
0
投票

没有你的代码就有点难以辨别,但这是一个例子。

在数据库中创建一个测试表

CREATE TABLE dbo.test(  
ID INT IDENTITY NOT NULL PRIMARY KEY,   
Name VARCHAR(40) NOT NULL  
);  

然后在Python中指定要插入的列

import pyodbc

warecn = pyodbc.connect("Your Connection Stuff")

Inscursor = warecn.cursor()

Inscursor.execute("Insert into dbo.test(name) values ('This'), ('is'), ('a'), ('test')")


Inscursor.commit()
Inscursor.close()
del Inscursor
warecn.close()
© www.soinside.com 2019 - 2024. All rights reserved.