Python 使用 sqlcmd 执行 sql 查询

Python execute sql query using sqlcmd

您好,我想使用 sqlcmd 执行查询,所以我使用 subprocess.call() 调用它。这个过程有时会起作用,但在循环中它不起作用。它只执行最后一个参数。请帮助下面是我正在尝试的示例代码-

import subprocess
host = 'hostname'
db = 'SQLTest'
sqlcmd = "C:\Program Files\Microsoft SQL Server0\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 模块。但它显示身份验证错误。

这是一个非常有创意的解决方案!

当你说“在循环中它不起作用”时,你能告诉我们发生了什么吗?有错误信息吗?是否运行,但table中没有插入数据?你能让它在循环外正常工作吗?

我首先注意到的是

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

您可能希望通过在引号前放置 "r" 使其成为原始字符串,如下所示:

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

这将防止 Python 尝试将反斜杠解释为特殊字符。

看起来您正在尝试与 SQL 服务器通信,因此 pymysql 不会提供帮助(这是为了与 MySQL 服务器通信)。我建议将 pyodbc 或 pymssql 作为替代方案。

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