Python中執行sql指令碼時GO語句出錯問題

來源:互聯網
上載者:User

標籤: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語句出錯問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.