Python执行sql脚本时GO语句报错

 在使用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 /?  查看

Python执行sql脚本时GO语句报错_第1张图片

 

你可能感兴趣的:(脚本语言)