5

我有一个 .sql 文件,其中包含一堆 SQL 查询,每个查询跨越多行。我想通过 Python 在 MySQL 中使用MySQLdb.

sqlite3为此目的有一个“非标准快捷方式”,称为executescript(),但在 中似乎没有任何等效功能MySQLdb

我注意到2 年前的这个老问题,它提出了同样的问题,但我发现答案并不令人满意。答案基本上是:

用于subprocess运行mysql命令并将其发送给您的 .sql 文件。

这行得通,但它相当不优雅,并且它通过错误处理等引入了不必要的复杂性。

如果每个查询都在一行上,只需分别执行每一行。

但就我而言,它们跨越多行,所以这行不通。

如果每个查询不在一行上,请以某种方式加入它们。

但是,怎么做?我的意思是,我可以很容易地破解一些东西,所以你不需要在这里回答半生不熟的答案,也许这就是我最终要做的,但是否已经有一个成熟的图书馆可以做到这一点?我对全面而正确的解决方案而不是黑客感到更自在。

4

1 回答 1

3

MySQLdb似乎允许这个开箱即用,你只需要调用cursor.nextset()循环返回的结果集。

db = conn.cursor()
db.execute('SELECT 1; SELECT 2;')

more = True
while more:
    print db.fetchall()
    more = db.nextset()

如果您想绝对确定对此的支持已启用,和/或禁用支持,您可以使用以下内容:

MYSQL_OPTION_MULTI_STATEMENTS_ON = 0
MYSQL_OPTION_MULTI_STATEMENTS_OFF = 1

conn.set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON)
# Multiple statement execution here...
conn.set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_OFF)
于 2012-06-12T02:33:52.387 回答