[英]Python execute sql file error pyodbc 'HY090', '[HY090] [Microsoft][ODBC Driver Manager] Invalid string or buffer length (0) (SQLExecDirectW)'
import sql_connect
def main():
# check if db exists on target, if not create
qry_create_db = "if not exists(select * from sys.databases where name = '{}') create database {};".format('mydb','mydb')
with sql_connect.conn:
cur1 = sql_connect.cursor.execute(qry_create_db)
cur1.commit()
main()
def creation_table(filename):
# Open and read the file as a single buffer
fd = open(filename, 'r')
sqlFile = fd.read()
fd.close()
# all SQL commands (split on ';')
sqlCommands = sqlFile.split(';')
# Execute every command from the input file
for command in sqlCommands:
with sql_connect.conn:
cur2 = sql_connect.cursor.execute(command)
cur2.commit()
creation_table('Mypath\\schema\\TABLES\\TOSHBA.sql')
creation_table('Mypath\\schema\\TABLES\\TALM_TYPE.sql')
這是我的 python 代碼,它創建了我的數據庫和我的表。 問題是當我執行我的功能時
"creation_table('Mypath\\schema\\TABLES\\TALM_TYPE.sql')"
我收到此錯誤:
pyodbc.Error: ('HY090', '[HY090] [Microsoft][ODBC Driver Manager] 無效的字符串或緩沖區長度 (0) (SQLExecDirectW)')
這是我的第一個 sql 文件腳本 TOSHBA,我首先使用我的函數 creation_table 執行它並且我沒有錯誤:
USE mydb;
DROP TABLE IF EXISTS TOSHBA;
CREATE TABLE TOSHBA
(
TOSHBA_WORK_ID INT NOT NULL IDENTITY,
WORK_NAME NVARCHAR(200) NOT NULL,
CONSTRAINT PK_TOSHBA PRIMARY KEY (TOSHBA_WORK_ID)
);
這里是我遇到錯誤的第二個 sql 腳本文件:
USE mydb;
DROP TABLE IF EXISTS TALM_TYPE;
CREATE TABLE TALM_TYPE
(
TALM_ID INT NOT NULL IDENTITY,
TOSHBA_id INT NOT NULL,
TALM_NAME NVARCHAR(20) NOT NULL,
CONSTRAINT PK_TALM PRIMARY KEY (TALM_ID),
CONSTRAINT FKֹ_TOSHBA_id FOREIGN KEY (TOSHBA_id) REFERENCES TOSHBA (TOSHBA_WORK_ID)
);
請幫助我理解錯誤並找到解決方案。
Python 版本:3.7.3 Pyodbc 版本:4.0.27
似乎刪除了最后一個';' 從 sql 文件中解決了這個問題。
我對此不是 100% 的,但是當我遇到同樣的問題並來到這里時,我嘗試刪除最后一個 ';' 從 sql 腳本,它工作。 所以看起來最后一個';'上的.split() 導致一個空行作為循環中的語句運行,無論那里是否有另一行。 因為空行不是有效的 sql 語句。
理論上,要務實地解決這個問題,您可以計算 ; 並且只運行多次拆分,或刪除最后一次; 在加載語句之前從腳本中獲取。 但是當你可以刪除最后一個';'時,這兩個都會超載在你的 sql 文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.