dum*_*ter 5 python mysql mysql-python
我有一个包含一堆SQL查询的.sql文件,每个查询跨越多行.我想通过Python在MySQL中执行这些查询MySQLdb.
sqlite3为此目的有一个"非标准的捷径"executescript(),但似乎没有任何等效的功能MySQLdb.
我注意到2年前这个老问题同样问题,但我发现答案不尽如人意.答案基本上是:
使用
subprocess运行mysql命令,并将其发送你的.sql文件.
这是有效的,但它相当不优雅,并且它引入了错误处理等不必要的复杂性.
如果每个查询都在一行上,则只需单独执行每一行.
但在我的情况下,它们跨越多行,所以这不起作用.
如果每个查询不在一行上,则以某种方式加入它们.
但是,怎么样?我的意思是,我可以轻松地修改一些东西,所以你不需要在这里回复半生不熟的答案,也许这就是我最终要做的事情,但是已经有一个既定的图书馆这样做了吗?对于全面而正确的解决方案而不是黑客,我会感到更舒服.
MySQLdb似乎允许这种开箱即用,你只需要调用cursor.nextset()循环返回的结果集。
db = conn.cursor()
db.execute('SELECT 1; SELECT 2;')
more = True
while more:
print db.fetchall()
more = db.nextset()
Run Code Online (Sandbox Code Playgroud)
如果您想绝对确定对此的支持已启用,和/或禁用该支持,您可以使用如下内容:
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)
Run Code Online (Sandbox Code Playgroud)