使用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
没有你的代码就有点难以辨别,但这是一个例子。
在数据库中创建一个测试表
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()