如何在Python中同时处理和执行多个SQL?
How to handle and execute multiple SQL at once in Python?
我正在尝试在 for-loop
中执行多个查询。所以在每个 loop
中,如果有一个 query
执行失败,那么 loop
中的所有 queries
都不会提交 database
和 return 错误失败 query
的消息。下面是我的代码。似乎即使有一个 query
未能 运行,其他查询仍将执行并将数据提交到 database
。我怎样才能改变它来实现我想要的?谢谢
代码:
import mysql.connector
mydb = mysql.connector.connect()
cursor = mydb.cursor()
for i in country_list:
try:
query1 = "call_sp_insert_sth_1" //insert data to DB
query2 = "call_sp_insert_sth_2" //insert data to DB
query3 = "call_sp_insert_sth_3" //update data to DB
cursor.execute(query1)
cursor.execute(query2)
cursor.execute(query3)
mydb.commit()
except Exceptiion as err:
fail_list.append('error':err.msg)
continue
mysql.connector.close_connection(mydb)
您需要将 mydb
连接设置为不 auto-commit。
mydb.autocommit = False
这就是我编写代码的方式。
import mysql.connector
mydb = mysql.connector.connect()
cursor = mydb.cursor()
query1 = "call_sp_insert_sth_1" //insert data to DB
query2 = "call_sp_insert_sth_2" //insert data to DB
query3 = "call_sp_insert_sth_3" //update data to DB
for i in country_list:
try:
with mydb.cursor() as curs:
cursor.execute(query1)
cursor.execute(query2)
cursor.execute(query3)
curs.close()
except Exception as err:
fail_list.append('error':err.msg)
else:
mydb.commit()
我倾向于将我的查询作为带有参数的 for 循环之外的变量,然后在循环中填充参数。
myquery = '''select * from {}'''
for table in tables:
curs.execute(myquery.format(table))
只有 'try' 部分没有错误,'else' 部分才会开始。
我正在尝试在 for-loop
中执行多个查询。所以在每个 loop
中,如果有一个 query
执行失败,那么 loop
中的所有 queries
都不会提交 database
和 return 错误失败 query
的消息。下面是我的代码。似乎即使有一个 query
未能 运行,其他查询仍将执行并将数据提交到 database
。我怎样才能改变它来实现我想要的?谢谢
代码:
import mysql.connector
mydb = mysql.connector.connect()
cursor = mydb.cursor()
for i in country_list:
try:
query1 = "call_sp_insert_sth_1" //insert data to DB
query2 = "call_sp_insert_sth_2" //insert data to DB
query3 = "call_sp_insert_sth_3" //update data to DB
cursor.execute(query1)
cursor.execute(query2)
cursor.execute(query3)
mydb.commit()
except Exceptiion as err:
fail_list.append('error':err.msg)
continue
mysql.connector.close_connection(mydb)
您需要将 mydb
连接设置为不 auto-commit。
mydb.autocommit = False
这就是我编写代码的方式。
import mysql.connector
mydb = mysql.connector.connect()
cursor = mydb.cursor()
query1 = "call_sp_insert_sth_1" //insert data to DB
query2 = "call_sp_insert_sth_2" //insert data to DB
query3 = "call_sp_insert_sth_3" //update data to DB
for i in country_list:
try:
with mydb.cursor() as curs:
cursor.execute(query1)
cursor.execute(query2)
cursor.execute(query3)
curs.close()
except Exception as err:
fail_list.append('error':err.msg)
else:
mydb.commit()
我倾向于将我的查询作为带有参数的 for 循环之外的变量,然后在循环中填充参数。
myquery = '''select * from {}'''
for table in tables:
curs.execute(myquery.format(table))
只有 'try' 部分没有错误,'else' 部分才会开始。