从 Python 运行 SQL 文件

Posted

技术标签:

【中文标题】从 Python 运行 SQL 文件【英文标题】:Running SQL file from Python 【发布时间】:2017-10-07 11:27:33 【问题描述】:

我必须启动一个 python sql 文件。 该文件用于mysql。 我试过这样:

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()

但我收到此错误:

错误:必须是 str,而不是 _io.TextIOWrapper

我该怎么办?

【问题讨论】:

这个看起来像你想要的。 ***.com/a/4563950/1394353 注意源使用的是什么 - 文件名,而不是内容。所以不要打开文件 【参考方案1】:

您需要传递文件的内容,而不是文件对象。

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

另外,请不要捕获异常只是为了打印它们并退出。这就是 Python 已经做的事情。省去那个 try/except。

【讨论】:

【参考方案2】:

好的,我将 mysql 指令移到了一个 bat 中。

from subprocess import Popen


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

没关系! 谢谢!

【讨论】:

以上是关于从 Python 运行 SQL 文件的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery 从 Python 脚本执行 SQL 文件

Python - 从文件执行多个 SQL 查询

在 Python 中读取 SQL 文件以通过 databricks 对 JDBC 运行

python运行sql文件且失败可以回滚

python运行sql文件且失败可以回滚

如何从查询选项卡运行 .sql 文件?