簡體   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