sql >> データベース >  >> RDS >> Oracle

cx_Oracle:結果セットを反復処理するにはどうすればよいですか?

    標準的な方法は、組み込みのカーソルイテレータを使用することです。

    curs.execute('select * from people')
    for row in curs:
        print row
    

    fetchall()を使用できます すべての行を一度に取得します。

    for row in curs.fetchall():
        print row
    

    これを使用して、返された値を含むPythonリストを作成すると便利な場合があります。

    curs.execute('select first_name from people')
    names = [row[0] for row in curs.fetchall()]
    

    これは小さな結果セットには役立ちますが、結果セットが大きい場合は悪い副作用が発生する可能性があります。

    • 結果セット全体がクライアントプロセスに返されるのを待つ必要があります。

    • 構築されたリストを保持するために、クライアントのメモリを大量に消費する可能性があります。

    • Pythonがリストを作成および分解するのに時間がかかる場合がありますが、とにかくすぐに破棄します。

    結果セットに返される行が1つあることがわかっている場合は、fetchone()を呼び出すことができます。 単一の行を取得します。

    curs.execute('select max(x) from t')
    maxValue = curs.fetchone()[0]
    

    最後に、一度に1行をフェッチする結果セットをループできます。一般に、イテレータを使用するよりもこれを行うことに特別な利点はありません。

    row = curs.fetchone()
    while row:
        print row
        row = curs.fetchone()
    


    1. MYSQL NOW()のタイムゾーンを設定します

    2. \ copyコマンドをpostgresqlの関数に使用できますか?

    3. Oracleの奇妙な動作-再帰CTEのクロス結合はコンマで機能しますが、クロス結合句では機能しません

    4. MySQL-前のSETステートメントの結果に依存するSETステートメントを使用したUPDATEクエリ