繁体   English   中英

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

[英]Python pyODBC : Issue inserting into a sql server table with an identity column

使用 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';列不允许空值。插入失败。(515 ) (SQLExecDirectW); [23000] [Microsoft][ODBC SQL Server Driver][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()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM