Python執行sql指令碼時GO語句報錯
阿新 • • 發佈:2018-12-09
在使用Python中的pymssql庫執行如下格式的sql指令碼時:
SELECT .....
GO
INSERT INTO ...
GO
報錯,錯誤資訊如下:
(102, b"Incorrect syntax near 'GO'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")
關鍵詞GO其實是一個分批處理的意思,每個被GO分隔的語句都是一個單獨的事務,也就是說一個語句執行失敗不會影響其它語句執行。但是在 pymssql中執行如下插入操作時,execute()一次只能處理單次事務,GO對於這裡的execute()來說是無法識別的關鍵詞,故語法報錯。
conn = pymssql.connect(host=config['host'], user=config['user'], password=config['password'],database=config['database'], port=config['port']) cur = conn.cursor() try: cur.execute(sql) conn.commit() except Exception as e: print(e) conn.rollback() cur.close() conn.close()
解決方案:
1. 指令碼中刪除 GO ,再執行即可。(嗯,看上去很直接,很省事,就是方法顯得有點不負責任~)
2. 利用python中的sqlcmd執行sql指令碼(windows環境)
import os
file_name='test.sql'
os.system("sqlcmd -S localhost -U sa -P 123456 -d DB_Name -i "+"\""+file_name+"\"" )
其他的引數,可以通過輸入命令:sqlcmd /? 檢視