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

psycopg2でサーバー側カーソルを使用する方法

    Psycopg2には、サーバー側カーソルを操作するための優れたインターフェイスがあります。これは使用可能なテンプレートです:

    with psycopg2.connect(database_connection_string) as conn:
        with conn.cursor(name='name_of_cursor') as cursor:
    
            cursor.itersize = 20000
    
            query = "SELECT * FROM ..."
            cursor.execute(query)
    
            for row in cursor:
                # process row 
    

    上記のコードは接続を作成し、クエリ結果をサーバー側カーソルに自動的に配置します。値 itersize クライアントがサーバー側カーソルから一度にプルダウンする行数を設定します。使用する値は、ネットワーク呼び出しの数とクライアントのメモリ使用量のバランスを取る必要があります。たとえば、結果の数が300万の場合、itersize 値が2000(デフォルト値)の場合、1500のネットワーク呼び出しが発生します。 2000行で消費されるメモリが少ない場合は、その数を増やします。

    カーソルの行にfor row in cursor もちろん、一度に1行ずつ操作しますが、Psycopg2はitersizeをプリフェッチします 一度に1行ずつ。

    fetchmanyを使用する場合 何らかの理由で、次のようなことができます:

    while True:
        rows = cursor.fetchmany(100)
        if len(rows) > 0:
            for row in rows:
                # process row
        else:
            break
    

    このfetchmanyの使用法 プリフェッチされたバッチが使い果たされるまで、サーバーへのネットワーク呼び出しをトリガーしてさらに行を追加することはありません。 (これは、上記のコードについて何も提供しない複雑な例ですが、fetchmanyの使用方法を示しています 必要があれば。)



    1. Pythonの挑戦的な文字列エンコーディング

    2. MySQL – SELECT SLEEP()を使用して数秒待つ

    3. .NET MySqlCommandでMySqlユーザー定義変数を使用することは可能ですか?

    4. タグによって最も類似した商品を判別するためのSQLクエリ