14

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()

もちろん、どちらの方法でも同じデータが返されます。

2 つのアプローチのトレードオフは何ですか? 特に多かれ少なかれ効率的ですか?多くのクエリでカーソルを再利用することの潜在的な落とし穴はありますか?

4

1 に答える 1

10

cx_Oracle カーソルは好きなだけ再利用できますが、問題ありません。短い時間で何千もの小さなクエリを実行している場合、カーソルを再利用することでパフォーマンスがわずかに向上する可能性がありますが、私はそうは思いません。

コードが読みやすく理解しやすくなるかどうかに応じて、新しいカーソルを作成することもあれば、既存のカーソルを再利用することもあります。

たとえば、データベースにアクセスする必要があるさまざまな手順がある場合、Oracle 接続オブジェクトを渡したり、その接続で作成されたカーソルを渡したりします。

あなたのコードをより読みやすく、保守しやすくするものは何でも、私が望むものです。

于 2010-01-10T13:33:01.573 に答える