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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值