私は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ブロックが実行されます。したがって、エラーがある場合は戻り値はなく、2回目のtry/exceptが実行されます。 2番目の「elseブロック」コードは常に実行されるため、エラーが発生した場合は、2回目のtry/exceptが実行される前にoutputname ERROR2で完了します。たぶんそれは起こっているかどうか見てみてください。 – jh44tx
それは、ありがとう@ jh44tx – Acoustic77