標籤:insert value 伺服器 執行sql 使用者名稱 near python 參考 bug
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語句出錯問題