新しいカーソルを作成する対カーソルを再利用するのトレードオフは何ですか?
質問
cx_Oracle(または一般にOracleなど)においては、各クエリのカーソルを割り当てるため、またはいくつかのクエリを横切ってカーソルを再利用することが可能である。
def getSomeData(curs): # case 1: pass in a cursor, which is generally
curs.execute('select ...') # reused across queries
return curs.fetchall()
def getSomeData(conn): # case 2: pass in a connection,allocate
curs=conn.cursor() # a cursor for this query
curs.execute('select ...')
return curs.fetchall()
もちろん、両方のアプローチは、同じデータを返します。
二つのアプローチの間のトレードオフは何ですか?一つの特に多かれ少なかれ効率的ですか?多くのクエリの上にカーソルを再利用への潜在的な落とし穴がありますか?
解決
あなたが同じくらい好きなようにcx_Oracleカーソルを再使用することができ、問題はありません。あなたは、時間の小さなスペースに小さなクエリの数千を実行している場合は、がは、カーソルを再利用することにより、わずかなパフォーマンスの向上が表示される場合がありますが、私はそれを疑うます。
私は時々、新しいカーソルを作成し、他の時間、それは読んで理解するためのコードが簡単になりますかどうかに応じて、既存のものを再使用します。
私は、データベースにアクセスするために必要な種々の手順を持っている場合は、たとえば、私の周りのOracle接続オブジェクト、またはその接続で作成されたカーソルを渡すかもしれません。
どのようなコードをより読みやすく、保守が容易になり、私はのために行くだろうものです。
所属していません StackOverflow