PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Jumlah baris Psycopg2 untuk kursor sisi server

Dalam kasus kursor sisi server, meskipun cursor.execute() kembali, kueri belum tentu dieksekusi oleh server pada saat itu, sehingga jumlah baris tidak tersedia untuk psycopg2 . Ini sesuai dengan spesifikasi DBAPI 2.0 yang menyatakan bahwa rowcount seharusnya -1 jika jumlah baris dari operasi terakhir tidak dapat ditentukan.

Mencoba memaksanya dengan cursor.fetchone() , misalnya, memperbarui cursor.rowcount , tetapi hanya dengan jumlah item yang diambil, sehingga tidak berguna. cursor.fetchall() akan menghasilkan rowcount yang disetel dengan benar, yang melakukan kueri penuh dan transfer data yang ingin Anda hindari.

Solusi yang mungkin untuk menghindari kueri yang benar-benar terpisah untuk mendapatkan penghitungan, dan yang seharusnya memberikan hasil yang akurat adalah:

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

Ini akan menghasilkan setiap baris memiliki jumlah baris tabel yang ditambahkan sebagai kolom terakhir. Anda kemudian bisa mendapatkan jumlah baris tabel menggunakan cursor.fetchone() dan kemudian mengambil kolom terakhir:

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]

Sekarang count akan berisi jumlah baris dalam tabel. Anda dapat menggunakan row[:-1] untuk merujuk ke data baris.

Ini mungkin memperlambat kueri karena SELECT COUNT(*) yang mungkin mahal akan dilakukan, tetapi setelah selesai mengambil data harus cepat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana mencegah penghapusan baris pertama dalam tabel (PostgreSQL)?

  2. PostgreSQL:Nonaktifkan koneksi untuk sementara

  3. kunci baris sampai selanjutnya pilih postgres

  4. Kesalahan saat membuka pgAdmin 4 di mac

  5. Ketika autovacuum tidak vakum