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

サーバー側カーソルのPsycopg2行数

    サーバー側カーソルの場合、cursor.execute() が返される場合、クエリはその時点でサーバーによって必ずしも実行されていないため、psycopg2は行数を使用できません。 。これは、DBAPI2.0仕様 と一致しています。 rowcount 最後の操作の行数が不確定な場合は-1にする必要があります。

    cursor.fetchone()で強制しようとします たとえば、cursor.rowcountを更新します 、ただし、取得されたアイテムの数だけであるため、これは役に立ちません。 cursor.fetchall() 結果はrowcountになります ただし、正しく設定されていると、回避しようとしているデータの完全なクエリと転送が実行されます。

    カウントを取得するための完全に別個のクエリを回避し、正確な結果が得られる可能性のある回避策は次のとおりです。

    select *, (select count(*) from test) from test;
    

    これにより、各行の最終列としてテーブルの行数が追加されます。次に、cursor.fetchone()を使用してテーブルの行数を取得できます。 そして最後の列を取ります:

    with db.cursor('cursor_name') as cursor:
        cursor.execute('select *, (select count(*) from test) from test')
        row = cursor.fetchone()
        data, count = row[:-1], row[-1]
    

    count テーブルの行数が含まれます。 row[:-1]を使用できます 行データを参照します。

    SELECT COUNT(*)が高額になる可能性があるため、クエリの速度が低下する可能性があります。 実行されますが、完了したらデータの取得は高速である必要があります。




    1. 選択クエリのMySQLIFELSEIF

    2. MuleSoftがGraphQLを採用してAPI統合を推進

    3. PHP mysqlフォーム、STUCK

    4. 内部結合を使用したOracleUpdateステートメント