0
我試圖使用下面的代碼連接到SQL服務器我收到錯誤無效的參數。我試圖從一個SQL文件中讀取,並使用sqlcmd在popen創建的會話上運行查詢。無法通過在Python中使用POPEN創建的會話執行sql命令
我的SQL文件中包含的代碼 -
select @@version;
GO
這是我的Python代碼進行連接,然後運行命令。我得到「[Errno 22]無效參數」
import os
import subprocess
from subprocess import Popen, PIPE, STDOUT
def ms_sql_session():
ip_addr = "xxx.xxx.xxx.xxx,1433"
user = 'sa'
password = 'password'
connection_string = 'sqlcmd -S %s -U %s -P %s' %(ip_addr, user, password)
try:
session = Popen(connection_string, stdin=PIPE, stdout=PIPE, stderr=PIPE)
f = open('abc.sql','r')
str_cmd = f.read()
session.stdin.write(str_cmd)
stdout, stderr = session.communicate()
print stdout
print stderr
return True
except Exception, e:
print str(e)
return False
ms_sql_session()
我該如何解決這種情況。我幾乎是新手到SQL,因此我不知道這是我的代碼或stdin的工作方式的問題。
我可以在命令提示符下使用sqlcmd實用程序運行命令。我使用的是SQLCMD爲SQL 2005
非常感謝。我認爲這是不好的使用python提供此警告消息。警告 如果與不可信輸入結合使用,調用shell = True的系統shell可能會帶來安全隱患。 – Hemant
如果我不想使用shell = True,我該如何提供sqlcmd路徑? – Hemant
例如我在這裏有sqlcmd: 'C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE' 所以這應該適合你: 'connection_string ='C:\\ Program Files \ \ Microsoft SQL Server \\ 100 \\ Tools \\ Binn \\ SQLCMD.EXE -S%s -U%s -P%s'%(ip_addr,user,password)' – Ernst