Python pyODBC:在带有标识列的SQL服务器表中插入问题

时间:2019-04-04 15:15:10

标签: sql sql-server python-3.x pyodbc

使用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

2 个答案:

答案 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)的视图,然后将其插入该视图。