2016-11-12 113 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

我得到了错误。这与我传递的查询有关。查询是从文本文件中读取的。所以除了最后一个查询之外,它们中都有空格。而对于单一测试,我使用的是最后一个查询。修复后,它工作。