新しいカーソルを作成する対カーソルを再利用するのトレードオフは何ですか?

StackOverflow https://stackoverflow.com/questions/2035212

質問

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接続オブジェクト、またはその接続で作成されたカーソルを渡すかもしれません。

どのようなコードをより読みやすく、保守が容易になり、私はのために行くだろうものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top