有多个SQL查询要触发时处理异常

时间:2018-10-22 09:16:47

标签: python mariadb pymysql try-except dbconnection

我正在使用四个选择查询从数据库中获取数据。数据的方式使得选择查询的输入可能为空。在这种情况下,可以使特定的select语句不起作用。简而言之,我想要的是应该触发这四个select语句,无论其他查询是否失败,无论哪个语句都可以工作。

if (2 -eq 2)
 {
    write-host "1"

    if (2 -eq 2)
    { 
        write-host "here"
        if (2 -eq 2)
        {                                                                                                                                                                                        {
            write-host "here3"
        }
        else 
        {
            write-host "here4"
         }
    }
     else
     {
         write-host "here5"
     }


 }

2 个答案:

答案 0 :(得分:2)

是的,只是将其放入for循环中。

ip_list = [ip_i, ip_n, ip_c, ip_b]
result_list = []

for ip in ip_list:
    try:
        cur.execute("select IP_ADD,VENDOR,DVC_ROLE,CIRCLE,SSA,REGION from DVC_SUMMARY_DATA where IP_ADD in (%s);" % ip)

    except Exception as e:
        print("error while fetching details " + str(e))        

    result_list.append(cur.fetchall())

我猜测cur.fetchall()不会生成错误,如果它生成了或者您不希望它运行,那么您可以将其放入尝试版本中。

所以我将其更改为此,以跟踪哪些生成的错误;

ip_list = [ip_i, ip_n, ip_c, ip_b]
result_list = []

for ip in ip_list:
    try:
        cur.execute("select IP_ADD,VENDOR,DVC_ROLE,CIRCLE,SSA,REGION from DVC_SUMMARY_DATA where IP_ADD in (%s);" % ip)
        result_list.append(cur.fetchall())

    except Exception as e:
        print("error while fetching details " + str(e))  
        result_list.append("ERROR")      

答案 1 :(得分:0)

将IP地址变量添加到列表中,然后遍历该列表。在这里,我使用traceback模块来打印整个堆栈跟踪信息(不仅仅是异常),而且我还在fetchall块内执行try,否则,如果出现异常确实会在您尝试不获取任何内容的execute期间发生。

import traceback

ip_list = [ ip_i, ip_n, ip_c, ip_b ]

for ip in ip_list:
    try:
        cur.execute("select IP_ADD,VENDOR,DVC_ROLE,CIRCLE,SSA,REGION from DVC_SUMMARY_DATA where IP_ADD in (%s);" % ip)

        result = cur.fetchall()

    except Exception as e:
        print(traceback.format_exc())