使用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_TABLE'的列'MY_IDENTITY_COLUMN'中;该列不允许为空。插入失败。(515)(SQLExecDirectW); [23000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]该语句已终止。(3621)“)”
但是当我尝试包括Identity列的值时(我不想这样做),我得到以下错误,这是有道理的,因为它是让表自动递增的Identity列
“当IDENTITY_INSERT设置为OFF时,无法在表'MY_TABLE'中为标识列插入显式值。”
当我在SQL SERVER中运行查询时,表填充了Identity列本身的值并自动递增,但是由于某些原因,当我在Python中运行该语句时,它不执行此操作并尝试传递NULL
SQL SERVER版本:10.50.6560.0
答案 0 :(得分: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()
答案 1 :(得分:0)
认识到它有点晚了,但是...最近我在使用一些旧程序和ODBC时遇到了同样的问题。解决方案是在SQL Server中仅创建所需列(即您的情况下为A和B)的视图,然后将其插入该视图。