提问人:Jimmy Jacques 提问时间:9/20/2023 更新时间:9/20/2023 访问量:34
使用 Python 中的 MySQL 连接器,如何创建存储过程然后立即使用它?
With MySQL Connector in Python how do I create a stored procedure then use it right away?
问:
在 python 中使用 mysql-connector,我正在尝试创建一个存储过程,然后创建另一个存储过程,该存储过程使用此代码调用第一个存储过程:
def ExecuteQueryFromFile(query_name, path):
try:
with open(path, "r") as file:
sql_script = file.read()
cursor.execute(sql_script)
result_set = cursor.fetchall()
except Exception as e:
print("An error occurred while executing " + query_name + ": {}".format(e))
cursor.close()
sepix_db_conn.close()
sys.exit(1)
print(query_name + " completed successfully.")
ExecuteQueryFromFile("sp1.sql", sp1Path)
ExecuteQueryFromFile("sp2.sql", sp2Path)
当我的光标执行查询以创建第二个存储过程时,我在函数中遇到了异常:
An error occurred while executing sp2.sql: 2014 (HY000): Commands out of sync; you can't run this command now
因为创建存储过程不会返回任何结果集,所以当 python 拍摄第二个存储过程创建时,我认为 mysql 仍在处理第一个存储过程创建(因此我添加了 以确保指令在移动到下一个之前在 mysql 中完成),但我的尝试失败了,我有同样的错误。result_set = cursor.fetchall()
我的第二次尝试涉及后跟并创建一个新光标,但相反,我遇到了同样的异常。sepix_db_conn.commit()
cursor.close()
正确的方法是什么?
答:
1赞
slaakso
9/20/2023
#1
文件的内容是什么?您是否有多个语句(例如“删除过程”)。
您可能需要使用
for result in cursor.execute(operation, multi=True):
....
评论
0赞
Jimmy Jacques
9/20/2023
是的,有多种陈述;我的文件以 a 开头,后面跟着 和它的所有内容。你的for循环似乎解决了我的问题;我想我真的需要遍历所有结果。drop procedure if exists
create procedure
0赞
slaakso
9/20/2023
@JimmyJacques 该函数一次执行一个命令,允许您为每次执行获取可能的结果集。execute
评论