Python pyODBC :插入具有标识列的 sql 服务器表时出现问题



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

表看起来像这样MY_TABLE( ID INT IDENTITY(1,1) 不为空,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';列不允许空值。插入失败。(515) (SQLExecDirectW);[23000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]语句已终止。(3621)")">

但是当我尝试包含 Identity 列的值时(我不想这样做),我收到以下错误,这是有道理的,因为它是一个我们让表自动递增的身份列

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

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

SQL 服务器版本: 10.50.6560.0

意识到有点晚了,但是...我最近在使用一些旧程序和 ODBC 时遇到了同样的问题。 解决方案是在 SQL Server 中创建一个仅包含所需列的视图(即在您的情况下为 A 和 B),然后插入到该视图中。

没有你的代码有点难以分辨,但这里有一个例子。

在数据库中创建测试表

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()

最新更新