在MySQL Python中,是否有一种方法可以对每个字符串执行多个查询?

2024-04-28 06:40:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

谢谢!


Tags: run字符串fromexecutedbusemysqltable
2条回答

查看MySQLCursor.execute()的文档。

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

If multi is set to True, execute() is able to execute multiple statements specified in the operation string.

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

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

当然,一个Python脚本可以从一个字符串或列表、external.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

相关问题 更多 >