2017-05-09 81 views
3

私はPythonのSQLファイルを起動する必要があります。 ファイルはmysql用です。 私はこのようにそれを試してみました:PythonからSQLファイルを実行する

from subprocess import Popen, PIPE 
import sys 


class ImportSql: 
    def execImport(self, fileSql): 
     try: 
      with open(fileSql, 'r') as fileInput: 
       proc = Popen(["mysql", "DB_NAME", "-u", "USER", "-pPASSWORD"], stdin=PIPE, stdout=PIPE) 
       proc.communicate('source ' + fileInput)[0] 
     except BaseException as ex: 
      print("ERROR:", ex) 
      sys.exit() 

しかし、私はこのエラーを取得:

ERROR: must be str, not _io.TextIOWrapper

私はどのように行うことができますか?

+0

これはあなたが望むように見えます。 http://stackoverflow.com/a/4563950/1394353ソースが使用しているもの、つまりコンテンツではなくファイル名を書き留めます。だからファイルを開かないでください –

答えて

2

ファイルオブジェクトではなく、ファイルの内容を渡す必要があります。

proc.communicate('source ' + fileInput.read()) 

また、例外をキャッチして印刷して終了しないでください。それが既にPythonがしていることです。 try/exceptを出てください。

0

私はバットの中でmysql命令を動かしました。

from subprocess import Popen 


class ImportSql: 
    def execImport(self): 
     p = Popen("import.bat") 
     p.communicate() 

大丈夫です!感謝! ありがとう!

関連する問題