在Python执行.sql文件与MySQLdb的(Execute .sql file in Pyth

2019-09-17 05:56发布

我有一个包含了一堆的SQL查询的.sql文件,每个查询的跨越多个行。 我想用通过Python执行在MySQL这些查询MySQLdb

sqlite3有“一个非标准快捷方式”为此,称为executescript()但似乎并没有以任何同等功能MySQLdb

我注意到这个老问题从2年前 ,询问同样的事情,但我发现答案不满意。 答案基本上是:

使用subprocess来运行mysql命令,并将其发送你的.sql文件。

这工作,但它是相当不雅,并介绍了不必要的错误处理和这种复杂性。

如果每个查询是单行线,只是单独执行的每一行。

但对我来说,他们跨越多行,所以这是不行的。

如果每个查询是不是单行线,莫名其妙地加入他们的行列。

但是,怎么样? 我的意思是,我可以砍了一些很轻松了,所以没有必要为你用半生不熟的答案在这里回答,也许这就是我最终会做什么,但有已经是既定库,做到这一点? 我会觉得更舒服了全面和正确的解决方案,而不是一个黑客。

Answer 1:

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)


文章来源: Execute .sql file in Python with MySQLdb