如何在python中同时处理和执行多个sql?

0lvr5msh  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(335)

我正在尝试在一个数据库中执行多个查询 for-loop . 所以在每个 loop ,如果 query 执行失败,全部 queries 在那里面 loop 不会承诺 database 并返回失败的错误消息 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)
ygya80vv

ygya80vv1#

我会这样写你的代码。

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”部分才会启动。

pn9klfpd

pn9klfpd2#

你需要设置 mydb 无法自动提交到的连接。

mydb.autocommit = False

相关问题