有没有办法在 MySQL-Python 中对每个字符串执行多个查询?
Is there a way to execute more than one query per string in MySQL-Python?
我有一些输入是包含多个 MySQL 查询的字符串,例如 USE some_db; SELECT * FROM some_table;
。当我将此字符串存储为 s
和 run cursor.execute(s)
时,它会打印出 0L
,而当我执行 cursor.fetchall()
时,它会 returns 一个空元组。它不会引发任何异常,但它也不起作用。当我将字符串拆分为两个查询并为每个查询打开一个游标并执行时,它起作用了,但是将字符串正确拆分为查询并不容易,尤其是在有注释的情况下。有没有办法避免拆分和执行多个查询的整个字符串?或者这有一个很好的库可以将多个查询的字符串拆分为每个查询一个的字符串?
谢谢!
当然,Python 脚本可以 运行 多个 SQL 来自字符串或列表、外部 .sql 或 .txt 文件的语句,这些文件可以来源于 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
查看 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):
我有一些输入是包含多个 MySQL 查询的字符串,例如 USE some_db; SELECT * FROM some_table;
。当我将此字符串存储为 s
和 run cursor.execute(s)
时,它会打印出 0L
,而当我执行 cursor.fetchall()
时,它会 returns 一个空元组。它不会引发任何异常,但它也不起作用。当我将字符串拆分为两个查询并为每个查询打开一个游标并执行时,它起作用了,但是将字符串正确拆分为查询并不容易,尤其是在有注释的情况下。有没有办法避免拆分和执行多个查询的整个字符串?或者这有一个很好的库可以将多个查询的字符串拆分为每个查询一个的字符串?
谢谢!
当然,Python 脚本可以 运行 多个 SQL 来自字符串或列表、外部 .sql 或 .txt 文件的语句,这些文件可以来源于 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
查看 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):