我正在通过一个数据库与python和使用try
和except
很多来处理查询。在试图优化我的代码时,我遇到了一个奇怪的颠簸。为什么删除这个还会让我的代码运行得更快?
此代码:
try:
cursor.execute("SELECT my_name FROM {}.{} LIMIT 1".format(myschema,mytable))
except(Exception, psycopg2.DatabaseError) as error:
conn.rollback()
else:
origName = cursor.fetchone()
if origName is None:
outputName = "ERROR2"
return outputName
try:
cursor.execute("SELECT different_column FROM {}.{} ORDER by a_column DESC LIMIT 1".format(myschema, mytable))
except(Exception, psycopg2.DatabaseError) as error:
conn.rollback()
try:...
#more try/excepts and so on
约需19分钟通过整个数据仓库运行。
但是这个代码:
try:
cursor.execute("SELECT my_column FROM {}.{} LIMIT 1".format(myschema,mytable))
except(Exception, psycopg2.DatabaseError) as error:
conn.rollback()
origName = cursor.fetchone()
if origName is None:
outputName = "ERROR2"
return outputName
try:
cursor.execute("SELECT different_column FROM {}.{} ORDER by a_column DESC LIMIT 1".format(myschema, mytable))
except(Exception, psycopg2.DatabaseError) as error:
conn.rollback()
try:...
#exact same code with try/excepts and so on
硬是完成了约1-1.5分钟运行。为什么如果我删除了那么快呢?是被跳过/忽略?我觉得我一定会做错的。我不明白如何在try:except:
声明之后继续使用我的代码。
在第二个版本中,如果有一个错误,你'fetchone'无论如何,获得无,并中止整个事情(或者'fetchone'抛出一个异常,你放弃这种方式)。 – user2357112
是的,在第一个,如果没有错误,else块运行。所以如果出现错误,就没有回报,第二次尝试/除了运行。在第二个中,“else block”代码总是运行,所以如果你有错误,它会在第二次尝试/除了运行之前以输出名ERROR2结束。也许尝试看看是否发生了什么。 – jh44tx
就是这样,谢谢@ jh44tx – Acoustic77