Python使用sqlcmd执行sql查询
问题描述:
您好我想使用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模块。但它显示验证错误。
答
这是一个非常有创意的解决方案!
当你说“在循环中不起作用”,你能告诉我们发生了什么?是否有错误讯息?它是否运行,但表中没有插入数据?你能得到这个在循环外正常工作吗?
我注意到的第一件事是
sqlcmd = "c:\program files\...."
你可能要做出一个原始字符串,通过把一个“R”的行情面前,就像这样:
sqlcmd = r"c:\program files\...."
那将阻止Python尝试将反斜线解释为特殊字符。
看起来你正在试图与SQL Server交谈,所以pymysql不会帮助(这是为了与MySQL服务器交谈)。我会建议寻找pyodbc或pymssql作为替代。
答
我得到了错误。这与我传递的查询有关。查询是从文本文件中读取的。所以除了最后一个查询之外,它们中都有空格。而对于单一测试,我使用的是最后一个查询。修复后,它工作。