首页 > 代码库 > Python中执行sql脚本时GO语句出错问题

Python中执行sql脚本时GO语句出错问题

sql脚本:

--创建链接服务器 (其中db2server是DB2的ip地址或服务器名)
exec sp_addlinkedserver ‘srv_lnk‘, ‘‘, ‘SQLOLEDB‘,‘10.138.60.94‘
exec sp_addlinkedsrvlogin ‘srv_lnk‘,‘false‘,null,‘sa‘,‘123456‘
Go
--数据导入(表B存在)
--Insert into srv_lnk.sys.Estamp.EstampConfig(field1,field2)
INSERT INTO srv_lnk.[PostLoan].[dbo].[TestReport]
([DBVersion]
,[CodeLines]
,[Duration]
,[LastDate]
,[Summary]
,[Amount]
,[SuccessAmount]
,[FailAmount]
,[BugAmount]
,[Remark])
SELECT
[DBVersion]
,[CodeLines]
,[Duration]
,[LastDate]
,[Summary]
,[Amount]
,[SuccessAmount]
,[FailAmount]
,[BugAmount]
,[Remark]
FROM [PostLoan].[dbo].[TestReport]
--数据导入(表B不存在)
--SELECT value1,value2 into srv_lnk.DB2.dbo.B
--from DB1.dbo.A

--关闭连接
exec sp_dropserver ‘srv_lnk‘,‘droplogins‘

 

直接利用Python中的pymssql库执行以上脚本的时候,会报错:“Incorrect syntax near ‘Go‘.DB-Lib error message 20018, severity 15”。这是因为GO不是sql中的关键字。

这时可以利用python中的os.system+sqlcmd执行sql脚本,方法如下:

import os os.system("sqlcmd -S localhost -U sa -P 123456 -d TRAINING -i \"d:\\sql\\tmp.txt\"")

sqlcmd命令参数说明:

-S:表示数据库服务器地址,如localhost

-U:用户名,如sa

-P: 密码,如123456

-d:数据库名,如TRAINING

-i:文件路径,如文件存放在d:\sql\tmp.txt, 需要写成这样 \"d:\\sql\\tmp.txt\"

路径书写需要注意下。路径用双引号"file_path",外面已经有双引号了,需要转义。因为是在windows系统,路径用反斜杠,也需要转义下。

参考地址:https://my.oschina.net/shong/blog/768394

Python中执行sql脚本时GO语句出错问题