当有多个 sql 查询被触发时处理异常
Handling exception when there are multiple sql queries to be fired
我正在使用四个 select 查询从数据库中获取数据。数据以这样的方式存在 select 查询的输入可能为空的情况。在那种情况下,那个特定的 select 语句不起作用是可以的。简而言之,我想要的是四个 select 语句应该触发,无论其他查询是否失败,无论哪个语句起作用都应该起作用。
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()
是的,只需将其放入 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() 不会产生错误,如果它产生错误或者您不希望它产生错误 运行 那么您可以将它放在 try 中。
所以我会把它改成这个来跟踪产生的错误;
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")
将您的 IP 地址变量添加到列表中,然后遍历该列表。在这里,我使用 traceback
模块来打印整个堆栈跟踪(不仅仅是异常),而且我还在 try
块中执行 fetchall
,否则,如果出现异常确实发生在 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())
我正在使用四个 select 查询从数据库中获取数据。数据以这样的方式存在 select 查询的输入可能为空的情况。在那种情况下,那个特定的 select 语句不起作用是可以的。简而言之,我想要的是四个 select 语句应该触发,无论其他查询是否失败,无论哪个语句起作用都应该起作用。
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()
是的,只需将其放入 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() 不会产生错误,如果它产生错误或者您不希望它产生错误 运行 那么您可以将它放在 try 中。
所以我会把它改成这个来跟踪产生的错误;
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")
将您的 IP 地址变量添加到列表中,然后遍历该列表。在这里,我使用 traceback
模块来打印整个堆栈跟踪(不仅仅是异常),而且我还在 try
块中执行 fetchall
,否则,如果出现异常确实发生在 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())