2017-05-09 123 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已經做的。離開那個嘗試/除了。

0

好的,我移動了蝙蝠內的mysql指令。

from subprocess import Popen 


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

沒關係! 謝謝!