有没有办法在MySQL-Python中为每个字符串执行多个查询?

时间:2015-06-29 01:38:31

标签: python mysql mysql-python

我有一些输入,这是一个包含多个MySQL查询的字符串,例如USE some_db; SELECT * FROM some_table;。当我将此字符串存储为srun cursor.execute(s)时,它会打印出0L,当我执行cursor.fetchall()时,它会返回一个空元组。它不会引发任何异常,但它也不起作用。当我将字符串拆分为两个查询并为每个查询打开并执行时,它可以工作,但正确地将字符串拆分成查询并不容易,尤其是在有注释时。有没有办法避免拆分并执行多个查询的整个字符串?或者这是一个很好的库,可以将一串多个查询分成一个字符串,每个查询一个查询?

谢谢!

2 个答案:

答案 0 :(得分:0)

当然,Python脚本可以从字符串或列表,外部.sql或.txt文件中运行多个SQL语句,这些文件可以源自MySQL。

但是,cur.execute命令一次运行一个SQL行。因此,您需要迭代地遍历每个SQL行。因此,请考虑用分号分割多个SQL命令。

s = "USE some_db; SELECT * FROM some_table;"

# filter() removes trailing empty list item
s = filter(None, s.split(';'))

for i in s:
    # strip() removes leading and trailing white spaces  
    # semicolon is re-added per line for query run
    cur.execute(i.strip() + ';')

但请务必删除评论中找到的任何分号。

# PROCESSING STEP 1;
# PROCESSING STEP 1

答案 1 :(得分:0)

查看MySQLCursor.execute()的文档。

它声称您可以传入multi参数,该参数允许您在一个字符串中运行多个查询。

  

如果multi设置为True,则execute()可以执行多个   操作字符串中指定的语句。

multi是execute()调用的可选第二个参数:

operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):