使用MySQLdb在Python中执行.sql文件

时间:2012-05-15 03:42:29

标签: python mysql mysql-python

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

sqlite3 has "a nonstandard shortcut" for this purpose called executescript(),但MySQLdb似乎没有任何等效功能。

我注意到this old question from 2 years ago要求同样的事情,但我发现答案不满意。答案基本上是:

  

使用subprocess运行mysql命令并将其发送到.sql文件。

这很有效,但它相当不优雅,并且它会引入错误处理等不必要的复杂性。

  

如果每个查询都在一行上,则只需单独执行每一行。

但在我的情况下,它们跨越多行,所以这不起作用。

  

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

但是,怎么样?我的意思是,我可以轻松地修改一些东西,所以你不需要在这里回答半生不熟的答案,也许这就是我最终要做的事情,但是已经有一个已建立的库可以做到这一点吗?对于全面而正确的解决方案而不是黑客,我感觉更舒服。

1 个答案:

答案 0 :(得分: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)