Apakah saya perlu menutup kursor dengan python?

Memerintahkan server untuk menutup dan membebaskan sumber daya server terkait. Server akan secara otomatis menutup kursor yang tidak memiliki hasil yang tersisa, serta kursor yang tidak digunakan selama beberapa waktu dan tidak memiliki opsi

Saat Anda membuka kursor, kursor ditempatkan sebelum baris pertama; . Lebih dari satu kursor dapat dibuka secara bersamaan

Anda dapat menggunakan klausa hanya baca jika Anda tidak bermaksud untuk menulis atau menghapus data; . pembaruan yang ditangguhkan. Menentukan untuk readonly dapat mempercepat pemrosesan. Jika Anda mencoba menulis data menggunakan kursor yang dibuka hanya untuk dibaca, Server DBMS akan mengeluarkan kesalahan runtime

Pernyataan close mengakhiri pemrosesan kursor

## tutup cursor cursor_name

Kursor dapat dibuka dan ditutup beberapa kali; . Menutup dan membuka kembali kursor akan memposisikannya kembali ke bagian atas tabel

Kursor tidak dapat tetap terbuka di seluruh transaksi;

Mengizinkan kode Python untuk mengeksekusi perintah PostgreSQL dalam sesi basis data. Kursor dibuat dengan metode tersebut. mereka terikat pada koneksi seumur hidup dan semua perintah dijalankan dalam konteks sesi database yang dibungkus oleh koneksi

Kursor yang dibuat dari koneksi yang sama tidak diisolasi, mis. e. , setiap perubahan yang dilakukan pada database oleh kursor akan langsung terlihat oleh kursor lainnya. Kursor yang dibuat dari koneksi yang berbeda dapat atau tidak dapat diisolasi, tergantung pada koneksinya. Lihat juga dan metode

Kursor tidak aman untuk thread. aplikasi multithread dapat membuat banyak kursor dari koneksi yang sama dan harus menggunakan setiap kursor dari satu thread. Lihat detailnya

Kursor dapat digunakan sebagai pengelola konteks. meninggalkan konteks akan menutup kursor

with conn.cursor() as curs:
    curs.execute(SQL)

# the cursor is now closed

keterangan

Atribut hanya-baca yang mendeskripsikan hasil kueri. Ini adalah urutan instance, masing-masing menggambarkan satu kolom hasil secara berurutan. Atributnya adalah

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
9 untuk operasi yang tidak mengembalikan baris atau jika kursor belum memiliki operasi yang dipanggil melalui metode

Untuk kompatibilitas dengan DB-API, setiap objek dapat dibongkar sebagai urutan 7 item. atribut yang disetel ulang dengan cara ini adalah sebagai berikut. Untuk perincian lebih lanjut dan atribut lain yang tersedia, periksa dokumentasi

  1. nama kolom dikembalikan

  2. PostgreSQL OID kolom

  3. panjang sebenarnya dari kolom dalam byte

  4. ukuran dalam byte kolom yang terkait dengan kolom ini di server

  5. jumlah digit signifikan dalam kolom tipe

    >>> cur.mogrify("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
    "INSERT INTO test (num, data) VALUES (42, E'bar')"
    
    7.
    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _9 untuk jenis lainnya

  6. hitungan digit desimal di bagian pecahan dalam kolom tipe

    >>> cur.mogrify("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
    "INSERT INTO test (num, data) VALUES (42, E'bar')"
    
    7.
    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _9 untuk jenis lainnya

  7. selalu

    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _9 karena tidak mudah diambil dari libpq

Berubah di versi 2. 4. jika memungkinkan, deskripsi kolom diberi nama tuple, bukan tuple biasa.

Berubah di versi 2. 8. deskripsi kolom adalah turunan dari

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
8, menampilkan atribut tambahan.

tutup()

Tutup kursor sekarang (daripada setiap kali

>>> cur.execute("SELECT * FROM test;")
>>> for record in cur:
..     print record
...
(1, 100, "abc'def")
(2, None, 'dada')
(3, 42, 'bar')
5 dijalankan). Kursor tidak akan dapat digunakan sejak saat ini;

Berubah di versi 2. 5. jika kursor digunakan dalam pernyataan

>>> cur.execute("SELECT * FROM test;")
>>> for record in cur:
..     print record
...
(1, 100, "abc'def")
(2, None, 'dada')
(3, 42, 'bar')
7, metode secara otomatis dipanggil di akhir blok
>>> cur.execute("SELECT * FROM test;")
>>> for record in cur:
..     print record
...
(1, 100, "abc'def")
(2, None, 'dada')
(3, 42, 'bar')
7.

tertutup

Atribut boolean hanya-baca. menentukan apakah kursor ditutup (

>>> cur.execute("SELECT * FROM test;")
>>> for record in cur:
..     print record
...
(1, 100, "abc'def")
(2, None, 'dada')
(3, 42, 'bar')
_9) atau tidak (
>>> cur.execute("SELECT * FROM test WHERE id = %s", (3,))
>>> cur.fetchone()
(3, 42, 'bar')
0)

ekstensi API DB

Atributnya adalah ekstensi Psycopg ke DB API 2. 0

Baru di versi 2. 0. 7

koneksi

Atribut read-only mengembalikan referensi ke objek tempat kursor dibuat

nama

Atribut hanya-baca yang berisi nama kursor jika dibuat sebagai kursor bernama oleh , atau

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
9 jika itu adalah kursor sisi klien. Lihat

ekstensi API DB

Atributnya adalah ekstensi Psycopg ke DB API 2. 0

dapat digulir

Baca/tulis atribut. menentukan apakah kursor bernama dinyatakan

>>> cur.execute("SELECT * FROM test WHERE id = %s", (3,))
>>> cur.fetchone()
(3, 42, 'bar')
6, maka dapat menggulir mundur (menggunakan ). Jika
>>> cur.execute("SELECT * FROM test;")
>>> for record in cur:
..     print record
...
(1, 100, "abc'def")
(2, None, 'dada')
(3, 42, 'bar')
_9, kursor dapat digulir mundur, jika
>>> cur.execute("SELECT * FROM test WHERE id = %s", (3,))
>>> cur.fetchone()
(3, 42, 'bar')
0 tidak pernah dapat digulir. Jika
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_9 (default) opsi gulir kursor tidak ditentukan, biasanya tetapi tidak selalu berarti tidak ada gulir ke belakang (lihat )

Catatan

tetapkan nilai sebelum memanggil atau gunakan parameter yang dapat digulir, jika tidak, nilainya tidak akan berpengaruh

Baru di versi 2. 5

ekstensi API DB

Atributnya adalah ekstensi Psycopg ke DB API 2. 0

menahan

Baca/tulis atribut. menentukan apakah umur kursor bernama harus diperpanjang di luar transaksi saat ini, i. e. , dimungkinkan untuk mengambil dari kursor bahkan setelah a (tetapi tidak setelah a ). Lihat

Catatan

tetapkan nilai sebelum memanggil atau gunakan parameter pemotongan, jika tidak, nilainya tidak akan berpengaruh

Baru di versi 2. 4. 3

ekstensi API DB

Atributnya adalah ekstensi Psycopg ke DB API 2. 0

Metode eksekusi perintah

eksekusi(kueri , vars=Tidak ada)

Jalankan operasi basis data (permintaan atau perintah)

Parameter dapat diberikan sebagai urutan atau pemetaan dan akan terikat pada variabel dalam operasi. Variabel ditentukan baik dengan placeholder posisi (

>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchall()
[(1, 100, "abc'def"), (2, None, 'dada'), (3, 42, 'bar')]
0) atau bernama (
>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchall()
[(1, 100, "abc'def"), (2, None, 'dada'), (3, 42, 'bar')]
1). Lihat

Metode mengembalikan

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_9. Jika kueri dieksekusi, nilai yang dikembalikan dapat diambil menggunakan metode

eksekusi(kueri , vars_list)

Jalankan operasi basis data (kueri atau perintah) terhadap semua tupel parameter atau pemetaan yang ditemukan dalam urutan vars_list

Fungsi ini sebagian besar berguna untuk perintah yang memperbarui database. set hasil apa pun yang dikembalikan oleh kueri akan dibuang

Parameter dibatasi ke kueri menggunakan aturan yang sama yang dijelaskan dalam metode

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_

Peringatan

Dalam penerapannya saat ini, metode ini tidak lebih cepat daripada mengeksekusi dalam satu lingkaran. Untuk kinerja yang lebih baik, Anda dapat menggunakan fungsi yang dijelaskan di

callproc(procname[ , parameter])

Panggil prosedur database tersimpan dengan nama yang diberikan. Urutan parameter harus berisi satu entri untuk setiap argumen yang diharapkan oleh prosedur. Prosedur kelebihan beban didukung. Parameter bernama dapat digunakan dengan menyediakan parameter sebagai kamus

Fungsi ini, saat ini, tidak sesuai dengan DBAPI. Nilai pengembalian seharusnya terdiri dari urutan parameter dengan output yang dimodifikasi dan parameter input/output. Di versi yang akan datang, nilai pengembalian yang sesuai dengan DBAPI dapat diimplementasikan, tetapi untuk saat ini fungsi mengembalikan Tidak Ada

Prosedur dapat memberikan hasil yang ditetapkan sebagai output. Ini kemudian tersedia melalui metode standar

Berubah di versi 2. 7. menambahkan dukungan untuk argumen bernama.

Catatan

>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchall()
[(1, 100, "abc'def"), (2, None, 'dada'), (3, 42, 'bar')]
_7 hanya dapat digunakan dengan fungsi PostgreSQL, bukan dengan prosedur yang diperkenalkan di PostgreSQL 11, yang memerlukan pernyataan
>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchall()
[(1, 100, "abc'def"), (2, None, 'dada'), (3, 42, 'bar')]
8 untuk dijalankan. Silakan gunakan normal untuk menjalankannya

mogrify(operasi[ , parameter])

Kembalikan string kueri setelah pengikatan argumen. String yang dikembalikan persis seperti yang akan dikirim ke database yang menjalankan metode atau serupa

String yang dikembalikan selalu merupakan string byte

>>> cur.mogrify("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
"INSERT INTO test (num, data) VALUES (42, E'bar')"

ekstensi API DB

Metodenya adalah ekstensi Psycopg ke DB API 2. 0

setinputsizes(ukuran)

Metode ini diekspos sesuai dengan DB API 2. 0. Saat ini tidak melakukan apa-apa tetapi aman untuk menyebutnya

Metode pengambilan hasil

Metode berikut digunakan untuk membaca data dari database setelah panggilan

Catatan

objek dapat diubah, jadi, alih-alih memanggil secara eksplisit dalam satu lingkaran, objek itu sendiri dapat digunakan

>>> cur.execute("SELECT * FROM test;")
>>> for record in cur:
..     print record
...
(1, 100, "abc'def")
(2, None, 'dada')
(3, 42, 'bar')
_

Berubah di versi 2. 4. mengulang pada mengambil catatan pada waktu dari backend. Sebelumnya hanya satu rekaman yang diambil per perjalanan pulang pergi, yang menghasilkan biaya tambahan yang besar.

ambil()

Ambil baris berikutnya dari rangkaian hasil kueri, kembalikan satu tupel, atau

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
9 saat tidak ada lagi data yang tersedia

>>> cur.execute("SELECT * FROM test WHERE id = %s", (3,))
>>> cur.fetchone()
(3, 42, 'bar')

A dinaikkan jika panggilan sebelumnya ke tidak menghasilkan set hasil apa pun atau belum ada panggilan yang dikeluarkan

ambil banyak([ukuran=kursor. ukuran array])

Ambil set baris berikutnya dari hasil kueri, mengembalikan daftar tupel. Daftar kosong dikembalikan ketika tidak ada lagi baris yang tersedia

Jumlah baris untuk diambil per panggilan ditentukan oleh parameter. Jika tidak diberikan, kursor akan menentukan jumlah baris yang akan diambil. Metode harus mencoba mengambil baris sebanyak yang ditunjukkan oleh parameter ukuran. Jika ini tidak memungkinkan karena jumlah baris yang ditentukan tidak tersedia, lebih sedikit baris yang dapat dikembalikan

>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchmany(2)
[(1, 100, "abc'def"), (2, None, 'dada')]
>>> cur.fetchmany(2)
[(3, 42, 'bar')]
>>> cur.fetchmany(2)
[]

A dinaikkan jika panggilan sebelumnya ke tidak menghasilkan set hasil apa pun atau belum ada panggilan yang dikeluarkan

Perhatikan ada pertimbangan kinerja yang terlibat dengan parameter ukuran. Untuk performa optimal, biasanya yang terbaik adalah menggunakan atribut. Jika parameter ukuran digunakan, maka yang terbaik adalah mempertahankan nilai yang sama dari satu panggilan ke panggilan berikutnya

ambil()

Ambil semua baris (yang tersisa) dari hasil kueri, kembalikan sebagai daftar tupel. Daftar kosong dikembalikan jika tidak ada lagi catatan untuk diambil

>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchall()
[(1, 100, "abc'def"), (2, None, 'dada'), (3, 42, 'bar')]

A dinaikkan jika panggilan sebelumnya ke tidak menghasilkan set hasil apa pun atau belum ada panggilan yang dikeluarkan

gulir(nilai[ , mode='relatif'])

Gulir kursor pada hasil yang diatur ke posisi baru menurut mode

Jika

>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.query
"INSERT INTO test (num, data) VALUES (42, E'bar')"
6 adalah
>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.query
"INSERT INTO test (num, data) VALUES (42, E'bar')"
7 (default), nilai diambil sebagai offset ke posisi saat ini di set hasil, jika diatur ke
>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.query
"INSERT INTO test (num, data) VALUES (42, E'bar')"
8, nilai menyatakan posisi target absolut

Jika operasi gulir meninggalkan set hasil, a dinaikkan dan posisi kursor tidak diubah

Catatan

Menurut DB API 2. 0, pengecualian yang dimunculkan untuk kursor di luar batas seharusnya adalah

>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.statusmessage
'INSERT 0 1'
0. Opsi terbaik mungkin menangkap kedua pengecualian dalam kode Anda

try:
    cur.scroll(1000 * 1000)
except (ProgrammingError, IndexError), exc:
    deal_with_it(exc)

Metode ini dapat digunakan untuk kursor sisi klien dan. Kursor sisi server biasanya dapat menggulir mundur hanya jika dideklarasikan. Memindahkan keluar dari batas di kursor sisi server tidak menghasilkan pengecualian, jika backend tidak memunculkan apa pun (Postgres tidak memberi tahu kami dengan cara yang dapat diandalkan jika kami keluar dari batas)

ukuran array

Atribut baca/tulis ini menentukan jumlah baris yang akan diambil sekaligus. Standarnya adalah 1 artinya mengambil satu baris sekaligus

itersize

Atribut baca/tulis yang menentukan jumlah baris yang akan diambil dari backend pada setiap perjalanan bolak-balik jaringan selama a. Standarnya adalah 2000

Baru di versi 2. 4

ekstensi API DB

Atributnya adalah ekstensi Psycopg ke DB API 2. 0

jumlah baris

Atribut read-only ini menentukan jumlah baris yang terakhir diproduksi (untuk pernyataan DQL seperti

>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.statusmessage
'INSERT 0 1'
5) atau terpengaruh (untuk pernyataan DML seperti
>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.statusmessage
'INSERT 0 1'
6 atau
>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.statusmessage
'INSERT 0 1'
7)

Atributnya adalah -1 jika tidak ada

>>> cur.mogrify("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
"INSERT INTO test (num, data) VALUES (42, E'bar')"
_0 yang dilakukan pada kursor atau jumlah baris dari operasi terakhir jika tidak dapat ditentukan oleh antarmuka

Catatan

API DB 2. 0 cadangan antarmuka untuk mendefinisikan kembali kasus terakhir agar objek mengembalikan

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
9 alih-alih -1 di versi spesifikasi yang akan datang

nomor baris

Atribut read-only ini menyediakan indeks kursor berbasis 0 saat ini di set hasil atau

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
9 jika indeks tidak dapat ditentukan

Indeks dapat dilihat sebagai indeks kursor secara berurutan (rangkaian hasil). Operasi pengambilan berikutnya akan mengambil baris yang diindeks dalam urutan tersebut

lastrowid

Atribut read-only ini menyediakan OID dari baris terakhir yang disisipkan oleh kursor. Jika tabel tidak dibuat dengan dukungan OID atau operasi terakhir bukan penyisipan catatan tunggal, atribut diatur ke

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
9

Catatan

PostgreSQL saat ini menyarankan untuk tidak membuat OID pada tabel dan default untuk

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
03 adalah tidak mendukungnya. Sintaks
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
04 tersedia dari PostgreSQL 8. 3 memungkinkan lebih banyak fleksibilitas

pertanyaan

Atribut hanya-baca yang berisi isi kueri terakhir yang dikirim ke backend (termasuk argumen terikat) sebagai string byte.

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_9 jika belum ada kueri yang dijalankan

>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.query
"INSERT INTO test (num, data) VALUES (42, E'bar')"

ekstensi API DB

Atributnya adalah ekstensi Psycopg ke DB API 2. 0

pesan status

Atribut read-only yang berisi pesan yang dikembalikan oleh perintah terakhir

>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
>>> cur.statusmessage
'INSERT 0 1'

ekstensi API DB

Atributnya adalah ekstensi Psycopg ke DB API 2. 0

cast(oid , s)

Mengonversi nilai dari representasi string PostgreSQL ke objek Python

Gunakan typecaster paling spesifik yang didaftarkan oleh

Baru di versi 2. 4

ekstensi API DB

Metodenya adalah ekstensi Psycopg ke DB API 2. 0

tzinfo_factory

Pabrik zona waktu digunakan untuk menangani tipe data seperti

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
10. Itu harus menjadi objek. Default adalah

Berubah di versi 2. 9. sebelumnya bawaan pabriknya.

set berikutnya()

Metode ini tidak didukung (PostgreSQL tidak memiliki banyak kumpulan data) dan akan menimbulkan pengecualian

setoutputsize(ukuran[ , kolom])

Metode ini diekspos sesuai dengan DB API 2. 0. Saat ini tidak melakukan apa-apa tetapi aman untuk menyebutnya

Metode terkait COPY

Salin data secara efisien dari objek seperti file ke database dan sebaliknya. Lihat untuk ikhtisar

ekstensi API DB

Perintah

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
15 adalah ekstensi PostgreSQL ke standar SQL. Dengan demikian, dukungannya adalah ekstensi Psycopg ke DB API 2. 0

salin_dari(file , tabel , sep='\\t' , null='\\\\N' , ukuran=8192 , kolom=Tidak ada)

Baca data dari file objek seperti file yang menambahkannya ke tabel bernama tabel

Parameter
  • file – objek mirip file untuk membaca data. Itu harus memiliki metode

    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    16 dan
    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    17

  • tabel – nama tabel untuk menyalin data

  • sep - pemisah kolom diharapkan dalam file. Default ke tab

  • null – representasi tekstual dari

    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _18 dalam file. Standarnya adalah string dua karakter
    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _19

  • size – ukuran buffer yang digunakan untuk membaca dari file

  • kolom – iterable dengan nama kolom yang akan diimpor. Panjang dan jenisnya harus sesuai dengan konten file yang akan dibaca. Jika tidak ditentukan, diasumsikan bahwa seluruh tabel sesuai dengan struktur file

Contoh

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_0

Berubah di versi 2. 0. 6. menambahkan parameter kolom.

Berubah di versi 2. 4. data yang dibaca dari file yang mengimplementasikan antarmuka dikodekan dalam koneksi saat dikirim ke backend.

Berubah di versi 2. 9. nama tabel dan field sekarang dikutip. Jika Anda perlu menentukan tabel yang memenuhi syarat skema, silakan gunakan.

copy_to(file , tabel , sep='\\t' , null='\\\\N' , kolom=Tidak ada)

Tulis konten tabel bernama tabel ke file objek seperti file. Lihat untuk ikhtisar

Parameter
  • file – objek mirip file untuk menulis data. Itu harus memiliki metode

    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _23

  • tabel – nama tabel tempat menyalin data

  • sep - pemisah kolom diharapkan dalam file. Default ke tab

  • null – representasi tekstual dari

    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _18 dalam file. Standarnya adalah string dua karakter
    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _19

  • kolom – iterable dengan nama kolom yang akan diekspor. Jika tidak ditentukan, ekspor semua kolom

Contoh

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_1

Berubah di versi 2. 0. 6. menambahkan parameter kolom.

Berubah di versi 2. 4. data yang dikirim ke file yang mengimplementasikan antarmuka didekodekan dalam koneksi saat dibaca dari backend.

Berubah di versi 2. 9. nama tabel dan field sekarang dikutip. Jika Anda perlu menentukan tabel yang memenuhi syarat skema, silakan gunakan.

copy_expert(sql , berkas , ukuran=8192)

Kirimkan pernyataan

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_15 yang dibuat oleh pengguna. Metode ini berguna untuk menangani semua parameter yang disediakan PostgreSQL (lihat dokumentasi perintah
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
15)

Parameter
  • sql – pernyataan

    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    _15 untuk dieksekusi

  • file – objek seperti file untuk membaca atau menulis (menurut sql)

  • size – ukuran buffer baca yang akan digunakan di

    >>> nums = ((1,), (5,), (10,))
    >>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)
    
    >>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
    >>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
    
    32

Pernyataan sql harus dalam bentuk

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
33 untuk mengekspor
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
34 ke objek file yang diteruskan sebagai argumen atau
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
35 untuk mengimpor konten objek file ke
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
34. Jika Anda perlu membuat pernyataan
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_15 secara dinamis (karena tabel, bidang, atau parameter kueri ada dalam variabel Python), Anda dapat menggunakan objek yang disediakan oleh modul

file harus berupa objek seperti file yang dapat dibaca (seperti yang dipersyaratkan oleh ) untuk pernyataan sql

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
40 atau objek yang dapat ditulis (seperti yang dipersyaratkan oleh ) untuk
>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
42

Contoh

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_2

Baru di versi 2. 0. 6

Berubah di versi 2. 4. berkas yang mengimplementasikan antarmuka ditangani menggunakan data Unicode, bukan byte.

Interoperasi dengan modul C API lainnya

presult_ptr

Kembalikan internal kursor

>>> nums = ((1,), (5,), (10,))
>>> cur.executemany("INSERT INTO test (num) VALUES (%s)", nums)

>>> tuples = ((123, "foo"), (42, "bar"), (23, "baz"))
>>> cur.executemany("INSERT INTO test (num, data) VALUES (%s, %s)", tuples)
_44 sebagai bilangan bulat. Berguna untuk meneruskan struktur hasil mentah libpq ke fungsi C, mis. g. melalui

Apa yang dilakukan kursor dekat ()?

close(). Gunakan close() saat Anda selesai menggunakan kursor. Metode ini menutup kursor, menyetel ulang semua hasil, dan memastikan bahwa objek kursor tidak memiliki referensi ke objek koneksi aslinya .

Apakah perlu untuk menutup koneksi MySQL dengan python?

Jika Anda mengakses MySQL secara langsung, seperti yang Anda lakukan pada contoh kode di atas, maka ya, Anda harus memutuskan sambungan secara eksplisit .

Apa yang dilakukan kursor () dengan python?

Memungkinkan kode Python untuk mengeksekusi perintah PostgreSQL dalam sesi basis data . Kursor dibuat oleh koneksi. metode kursor(). mereka terikat pada koneksi seumur hidup dan semua perintah dijalankan dalam konteks sesi database yang dibungkus oleh koneksi.

Bagaimana cara menghapus kursor dengan python?

Pergi ke Solusi. Kemudian atur baris[1] = Tidak ada. Dengan menggunakan kursor pembaruan, Anda dapat memindahkan nilai baris[1] ke dalam baris[2], lalu menghapus (atur ke Tidak ada) nilai dalam baris[1]