2016-11-12 116 views
0

您好我想使用sqlcmd執行查詢,所以我使用subprocess.call()調用它。這個過程有時可以工作,但是在循環中它不起作用。它只執行最後一個參數。請幫助下面是我試圖的示例代碼 -Python使用sqlcmd執行sql查詢

import subprocess 
host = 'hostname' 
db = 'SQLTest' 
sqlcmd = "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
query = "INSERT INTO [dbo].[Test](type,ident,lat,long,y_proj,x_proj,new_seg,display,color,altitude,depth,temp,time,model,filename,ltime) VALUES ('TRACK','ACTIVE LOG','40.79015493','-77.85914183','4627311.94501541','1779470.5827101','False','False','255','351.979858398438','0','0','2008/06/11-14:33:33','eTrex Venture','','2008/06/11 09:33:33')" 
for x in range (0,5): 
    subprocess.call([sqlcmd,'-S' ,host, '-d', db, '-Q', query]) 

或者是否有任何其他方法。我甚至嘗試過pymysql模塊。但它顯示驗證錯誤。

回答

0

這是一個非常有創意的解決方案!

當你說「在循環中不起作用」,你能告訴我們發生了什麼?是否有錯誤訊息?它是否運行,但表中沒有插入數據?你能得到這個在循環外正常工作嗎?

我注意到的第一件事是

sqlcmd = "c:\program files\...." 

你可能要做出一個原始字符串,通過把一個「R」的行情面前,就像這樣:

sqlcmd = r"c:\program files\...." 

那將阻止Python嘗試將反斜線解釋爲特殊字符。

看起來你正在試圖與SQL Server交談,所以pymysql不會幫助(這是爲了與MySQL服務器交談)。我會建議尋找pyodbc或pymssql作爲替代。

0

我得到了錯誤。這與我傳遞的查詢有關。查詢是從文本文件中讀取的。所以除了最後一個查詢之外,它們中都有空格。而對於單一測試,我使用的是最後一個查詢。修復後,它工作。