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

これは非常に創造的な解決策です!

「ループしても動作しません」と言うと、何が起きているのか教えていただけますか?エラーメッセージはありますか?それは実行されますが、データはテーブルに挿入されませんか?これをループ外で正しく動作させることができますか?

私が最初に気づくのは、あなたがそうのように、引用符の前に「R」を置くことによって、生の文字列ことを確認したい場合があります

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

です:

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

ことPythonがバックスラッシュを特殊文字として解釈しようとしないようにします。

あなたはSQL Serverと話をしているようですので、pymysqlは役立たないでしょう(これはMySQLサーバーと話すためのものです)。代わりにpyodbcやpymssqlを調べることをお勧めします。

0

エラーが発生しました。それは私が渡していたクエリに関連していました。クエリはテキストファイルからの読み込みでした。したがって、最後のクエリを除いてスペースがあります。私は最後のクエリを使っていました。固定した後、それは働いた。

関連する問題