Обработка исключения, когда нужно запустить несколько SQL-запросов - PullRequest
0 голосов
/ 22 октября 2018

Я получаю данные из базы данных, используя четыре запроса на выборку.Данные расположены таким образом, что бывают случаи, когда ввод для выбора запроса может быть пустым.В этом случае вполне допустимо, чтобы конкретный оператор выбора не работал.Короче говоря, я хочу, чтобы четыре оператора выбора запускались, и любые операторы работали независимо от получения другого запроса.

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

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

result_i = cur.fetchall()

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

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

result_n = cur.fetchall()

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

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

result_c = cur.fetchall()

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

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

result_b = cur.fetchall()

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Добавьте переменные 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())
0 голосов
/ 22 октября 2018

да просто поместите его в цикл 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")      
...