首页 > 代码库 > 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语句出错问题