我有一个.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文件。
这很有效,但它相当不优雅,并且它会引入错误处理等不必要的复杂性。
如果每个查询都在一行上,则只需单独执行每一行。
但在我的情况下,它们跨越多行,所以这不起作用。
如果每个查询不在一行上,就会以某种方式加入它们。
但是,怎么样?我的意思是,我可以轻松地修改一些东西,所以你不需要在这里回答半生不熟的答案,也许这就是我最终要做的事情,但是已经有一个已建立的库可以做到这一点吗?对于全面而正确的解决方案而不是黑客,我感觉更舒服。
答案 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)