Berbagi teknologi

sqlite3 — Antarmuka DB-API 2.0 untuk database SQLite

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

sqlite3 — Antarmuka DB-API 2.0 untuk database SQLite — Dokumentasi Python 3.12.4

sqlite3— Antarmuka DB-API 2.0 untuk database SQLite
sqlite3 — Antarmuka DB-API 2.0 untuk database SQLite

Kode sumber: Perpustakaan/sqlite3/    Lokasi kode sumber:Lib/sqlite3/

SQLite adalah pustaka C yang menyediakan basis data berbasis disk ringan yang tidak memerlukan proses server terpisah dan memungkinkan akses ke basis data menggunakan varian bahasa kueri SQL yang tidak standar. Beberapa aplikasi dapat menggunakan SQLite untuk penyimpanan data internal. Anda juga dapat membuat prototipe aplikasi menggunakan SQLite lalu memindahkan kode tersebut ke basis data yang lebih besar seperti PostgreSQL atau Oracle.
SQLite adalah pustaka bahasa C yang menyediakan database berbasis disk ringan yang tidak memerlukan proses server terpisah dan memungkinkan database diakses menggunakan varian non-standar dari bahasa query SQL. Beberapa aplikasi dapat menggunakan SQLite untuk penyimpanan data internal. Selain itu, Anda dapat menggunakan SQLite untuk membuat prototipe aplikasi dan kemudian memigrasikan kode ke database besar seperti PostgreSQL atau Oracle.

Itusqlite3Modul ini ditulis oleh Gerhard Häring. Modul ini menyediakan antarmuka SQL yang sesuai dengan spesifikasi DB-API 2.0 yang dijelaskan olehPEP 249, dan membutuhkan SQLite 3.7.15 atau yang lebih baru.
modul sqlite3 Ditulis oleh Gerhard Häring. Ini menyediakan antarmuka SQL yang sesuai dengan spesifikasi DB-API 2.0 yang dijelaskan oleh PEP 249, dan memerlukan SQLite versi 3.7.15 atau lebih tinggi.

Dokumen ini mencakup empat bagian utama: Dokumen ini terutama mencakup empat bagian utama berikut

  • Tutorialmengajarkan cara menggunakansqlite3modul.tutorialBagian mengajarkan cara menggunakan modul sqlite3.

  • Referensimenjelaskan kelas dan fungsi yang didefinisikan modul ini.
    mengacu padabagian menjelaskan kelas dan fungsi yang ditentukan oleh modul ini.

  • Panduan cara melakukan sesuatumerinci cara menangani tugas tertentu.
    Panduan operasiBagian merinci cara menangani tugas tertentu.

  • Penjelasanmenyediakan latar belakang mendalam tentang pengendalian transaksi.
    menjelaskanBagian ini memberikan pengenalan mendalam tentang latar belakang pengetahuan pengendalian transaksi.

Lihat juga

https://www.sqlite.org

Halaman web SQLite; dokumentasi menjelaskan sintaksis dan tipe data yang tersedia untuk dialek SQL yang didukung.
Halaman web SQLite; dokumentasinya menjelaskan sintaks dialek SQL yang didukung dan tipe data yang tersedia.

Panduan SQLTutorial SQL

Tutorial, referensi dan contoh untuk mempelajari sintaksis SQL.
Tutorial, referensi, dan contoh untuk mempelajari sintaksis SQL.

PEP 249- Spesifikasi API Basis Data 2.0 PEP 249 - Spesifikasi API Basis Data 2.0

PEP ditulis oleh Marc-André Lemburg. PEP ditulis oleh Marc-André Lemburg.

Tutorialtutorial

Dalam tutorial ini, Anda akan membuat database Film Monty Python menggunakan dasarsqlite3fungsionalitas. Ini mengasumsikan pemahaman mendasar tentang konsep database, termasukkursorDantransaksi.
Dalam tutorial ini, Anda akan menggunakan fungsionalitas dasar sqlite3 untuk membuat database tentang film Monty Python. Tutorial ini mengasumsikan Anda memiliki pengetahuan dasar tentang konsep database, termasuk kursor dan transaksi.

Pertama, kita perlu membuat database baru dan membuka koneksi database untuk memungkinkansqlite3untuk bekerja dengannya. Hubungisqlite3.koneksi()untuk membuat koneksi ke databasetutorial.dbdi direktori kerja saat ini, secara implisit menciptakannya jika tidak ada:
Pertama, kita perlu membuat database baru dan membuka koneksi database agar sqlite3 dapat berinteraksi dengannya. Panggil sqlite3.connect() untuk membuat koneksi ke database tutorial.db di direktori kerja saat ini, secara implisit dan otomatis membuatnya jika database tidak ada:

  1. import sqlite3
  2. con = sqlite3.connect("tutorial.db")

Yang sudah kembaliKoneksiobyekconmewakili koneksi ke pangkalan data pada disk.
Objek Connection yang dikembalikan (dalam hal ini bernama con) mewakili koneksi ke database pada disk.

Untuk mengeksekusi pernyataan SQL Danmengambil hasil dari kueri SQL, kita perlu menggunakan kursor basis data. Panggilancon.kursor()untuk membuatKursor:
Untuk mengeksekusi pernyataan SQL dan mendapatkan hasil dari query SQL, kita perlu menggunakan kursor database. Panggil con.cursor() untuk membuat Kursor:

cur = con.cursor()

Sekarang kita sudah memiliki koneksi database dan kursor, kita dapat membuat tabel databasemoviedengan kolom untuk judul, tahun rilis, dan skor ulasan. Untuk kesederhanaan, kita cukup menggunakan nama kolom dalam deklarasi tabel – berkatmengetik fleksibelfitur SQLite, menentukan tipe data adalah opsional. JalankanCREATE TABLEpernyataan dengan meneleponcur.eksekusi(...):
Sekarang kita memiliki koneksi database dan kursor, kita bisa membuat tabel database bernama film dengan kolom seperti judul, tahun rilis, dan skor ulasan. Untuk menyederhanakan, kita dapat menggunakan nama kolom secara langsung dalam deklarasi tabel - menentukan tipe data bersifat opsional karena fitur pengetikan SQLite yang fleksibel. Jalankan pernyataan CREATE TABLE dengan memanggil cur.execute(...):

cur.execute("CREATE TABLE movie(title, year, score)")

Kita dapat memverifikasi bahwa tabel baru telah dibuat dengan melakukan querysqlite_mastertabel yang dibangun ke dalam SQLite, yang sekarang harus berisi entri untukmoviedefinisi tabel (lihatTabel Skemauntuk detailnya). Jalankan kueri itu dengan memanggilcur.eksekusi(...), tetapkan hasilnya keres, dan meneleponres.ambil()untuk mengambil baris yang dihasilkan:
Kita dapat memverifikasi bahwa tabel baru telah dibuat dengan menanyakan tabel sqlite_master bawaan SQLite, yang sekarang seharusnya berisi entri untuk definisi tabel film (lihat tabel skema untuk detailnya). Jalankan kueri dengan memanggil cur.execute(...), tetapkan hasilnya ke res, dan panggil res.fetchone() untuk mendapatkan baris hasil:

>>>

  1. >>> res = cur.execute("SELECT name FROM sqlite_master")
  2. >>> res.fetchone()
  3. ('movie',)

Kita dapat melihat bahwa tabel telah dibuat, karena query mengembalikantupelberisi nama tabel. Jika kita melakukan querysqlite_masteruntuk tabel yang tidak adaspamres.fetchone()akan kembaliNone:
Kita dapat melihat bahwa tabel berhasil dibuat karena kueri mengembalikan tupel yang berisi nama tabel. Jika kita menanyakan sqlite_master untuk tabel yang tidak ada (seperti spam), res.fetchone() akan mengembalikan Tidak Ada.

>>>

  1. >>> res = cur.execute("SELECT name FROM sqlite_master WHERE name='spam'")
  2. >>> res.fetchone() is None
  3. True

Sekarang, tambahkan dua baris data yang diberikan sebagai literal SQL dengan menjalankan perintahINSERTpernyataan, sekali lagi dengan memanggilcur.eksekusi(...):
Sekarang, tambahkan dua baris data, yang disediakan sebagai literal SQL, dengan menjalankan pernyataan INSERT (memanggil cur.execute(...) lagi):

  1. cur.execute("""
  2. INSERT INTO movie VALUES
  3. ('Monty Python and the Holy Grail', 1975, 8.2),
  4. ('And Now for Something Completely Different', 1971, 7.5)
  5. """)

ItuINSERTpernyataan ini secara implisit membuka transaksi, yang perlu dilakukan sebelum perubahan disimpan dalam database (lihatKontrol transaksiuntuk rinciannya). Panggilancon.komit()pada objek koneksi untuk melakukan transaksi:
Pernyataan INSERT secara implisit dan otomatis memulai transaksi yang perlu dilakukan sebelum perubahan disimpan ke database (lihat Kontrol Transaksi untuk rinciannya). Panggil con.commit() pada objek koneksi untuk melakukan transaksi:

con.commit()

Kita dapat memverifikasi bahwa data telah dimasukkan dengan benar dengan menjalankan perintahSELECTquery. Gunakan yang sudah familiarcur.eksekusi(...)untuk menetapkan hasil keres, dan meneleponres.ambil()untuk mengembalikan semua baris yang dihasilkan:
Kami dapat memverifikasi bahwa data telah dimasukkan dengan benar dengan menjalankan kueri SELECT. Tetapkan hasilnya ke res menggunakan cur.execute(...) yang sudah familiar dan panggil res.fetchall() untuk mengembalikan semua baris hasil:

>>>

  1. >>> res = cur.execute("SELECT score FROM movie")
  2. >>> res.fetchall()
  3. [(8.2,), (7.5,)]

Hasilnya adalah sebuahdaftardari duatuples, satu per baris, masing-masing berisi baris ituscorenilai.
Hasilnya adalah daftar dua tupel, satu untuk setiap baris, dan setiap tupel berisi nilai skor untuk baris tersebut.

Sekarang, masukkan tiga baris lagi dengan memanggileksekusi cur.(...):
Sekarang, masukkan tiga baris data lagi dengan memanggil cur.executemany(...):

  1. data = [
  2. ("Monty Python Live at the Hollywood Bowl", 1982, 7.9),
  3. ("Monty Python's The Meaning of Life", 1983, 7.5),
  4. ("Monty Python's Life of Brian", 1979, 8.0),
  5. ]
  6. cur.executemany("INSERT INTO movie VALUES(?, ?, ?)", data)
  7. con.commit() # Remember to commit the transaction after executing INSERT.

Perhatikan itu?placeholder digunakan untuk mengikatdatake kueri. Selalu gunakan placeholder alih-alihpemformatan stringuntuk mengikat nilai Python ke pernyataan SQL, untuk menghindariSerangan injeksi SQL(melihatCara menggunakan placeholder untuk mengikat nilai dalam kueri SQLuntuk lebih jelasnya).
Perhatikan bahwa placeholder ? digunakan untuk mengikat data ke dalam kueri. Selalu gunakan placeholder alih-alih pemformatan string untuk mengikat nilai Python ke dalam pernyataan SQL untuk menghindari serangan injeksi SQL (lihat "Cara mengikat nilai menggunakan placeholder dalam kueri SQL" untuk lebih jelasnya).

Kita dapat memverifikasi bahwa baris baru telah dimasukkan dengan menjalankan perintahSELECTkueri, kali ini mengulangi hasil kueri:
Kita dapat memverifikasi bahwa baris baru telah disisipkan dengan mengeksekusi query SELECT, kali ini kita akan mengulangi hasil query:

>>>

  1. >>> for row in cur.execute("SELECT year, title FROM movie ORDER BY year"):
  2. ... print(row)
  3. (1971, 'And Now for Something Completely Different')
  4. (1975, 'Monty Python and the Holy Grail')
  5. (1979, "Monty Python's Life of Brian")
  6. (1982, 'Monty Python Live at the Hollywood Bowl')
  7. (1983, "Monty Python's The Meaning of Life")

Setiap baris adalah dua itemtupeldari(year, title), cocok dengan kolom yang dipilih dalam kueri.
Setiap baris adalah tupel yang berisi dua elemen (tahun, judul), yang cocok dengan kolom yang dipilih dalam kueri.

Terakhir, verifikasi bahwa database telah ditulis ke disk dengan memanggilcon.tutup()untuk menutup koneksi yang ada, membuka koneksi baru, membuat kursor baru, lalu melakukan kueri ke database:
Terakhir, dengan meneleponcon.close() untuk menutup koneksi database yang ada dan memastikan bahwa database telah ditulis ke disk. Kemudian, buka koneksi baru, buat kursor baru, dan kueri database untuk memverifikasi bahwa data berhasil ditulis.

>>>

  1. >>> con.close()
  2. >>> new_con = sqlite3.connect("tutorial.db")
  3. >>> new_cur = new_con.cursor()
  4. >>> res = new_cur.execute("SELECT title, year FROM movie ORDER BY score DESC")
  5. >>> title, year = res.fetchone()
  6. >>> print(f'The highest scoring Monty Python movie is {title!r}, released in {year}')
  7. The highest scoring Monty Python movie is 'Monty Python and the Holy Grail', released in 1975
  8. >>> new_con.close()

Anda sekarang telah membuat database SQLite menggunakansqlite3modul, memasukkan data, dan mengambil nilai darinya dengan berbagai cara.
Anda sekarang telah menggunakannyasqlite3 Modul ini membuat database SQLite dan menyisipkan serta mengambil data darinya dengan berbagai cara [Ambil? 】Nilai.

Lihat jugaLihat juga

ReferensiDeskripsi Parameter

Fungsi modul

sqlite3.connect(database, timeout=5.0, detect_types=0, isolation_level='DEFERRED', check_same_thread=True, factory=sqlite3.Connection, cached_statements=128, uri=False, *, autocommit=sqlite3.LEGACY_TRANSACTION_CONTROL)

Buka koneksi ke database SQLite. Fungsi ini digunakan untuk membuka koneksi ke database SQLite.

Parameternya:
  • basis data (objek seperti jalur) – Jalur ke file database yang akan dibuka. Anda dapat meneruskan":memory:"untuk membuat sebuahDatabase SQLite hanya ada di memori, dan membuka koneksi ke sana.database (path-like object) 
    database (objek seperti jalur) — Ini adalah jalur ke file database yang akan dibuka.Anda bisa lulus":memory:"untuk membuat database SQLite dalam memori dan membuka .database (objek seperti jalur) yang terhubung dengannya.

  • waktu habis (mengambang) – Berapa detik koneksi harus menunggu sebelum menaikkanKesalahan Operasionalketika sebuah tabel terkunci. Jika koneksi lain membuka transaksi untuk mengubah tabel, tabel tersebut akan terkunci hingga transaksi dilakukan. Default lima detik.timeout (float) — Koneksi terputus saat tabel terkunciOperationalError Berapa detik yang harus ditunggu sebelumnya. Jika koneksi lain membuka transaksi untuk mengubah tabel, tabel akan dikunci hingga transaksi dilakukan. Nilai defaultnya adalah lima detik.

  • mendeteksi_jenis (ke dalam) – Mengontrol apakah dan bagaimana tipe data bukandidukung secara asli oleh SQLitedicari untuk dikonversi ke tipe Python, menggunakan konverter yang terdaftar denganregister_konverter()Atur ke kombinasi apa pun (menggunakan|, bitwise atau) dariPARSE_DECLTYPESDanPARSE_NAMA_KOLOMuntuk mengaktifkan ini. Nama kolom mengambil prioritas atastipe yang dideklarasikan jika kedua bendera diatur. Jenis tidak dapat dideteksi untuk bidang yang dihasilkan (misalnyamax(data)), bahkan ketikamendeteksi_jenisparameter telah ditetapkan;kuatakan dikembalikan sebagai gantinya. Secara default (0), deteksi tipe dinonaktifkan.
    detect_types (int)— Mengontrol apakah dan bagaimana tipe data yang tidak didukung SQLite ditemukan untuk digunakanregister_converter() Konverter terdaftar mengonversinya menjadi tipe Python.atur kePARSE_DECLTYPESDanPARSE_COLNAMESkombinasi apa pun (menggunakan bitwise atau| ) untuk mengaktifkan fitur ini.Jika kedua bendera disetel, makaDaftar akan diutamakanpenyataan jenis.Untuk wilayah yang dihasilkan, jenis ini tidak dapat dideteksi (mis.max(data)), meskipun diseteldetect_typesparameter; sebaliknya ia akan kembalistr jenis. Secara default (0), deteksi tipe dinonaktifkan.


Masukkan di sini
Dalam paragraf bahasa Inggris ini, siapa yang menjadi subjek "are look up to"?
Dalam paragraf bahasa Inggris ini, subjek "yang dicari" adalah "tipe data yang tidak didukung secara asli oleh SQLite (tipe data yang tidak didukung secara asli oleh SQLite)".Maksud kalimat ini adalah dengan menggunakanregister_converter() Konverter terdaftar untuk menemukan dan mengonversi tipe data yang tidak didukung secara asli oleh SQLite ke tipe Python. Jadi, subjek adalah tipe data spesifik yang perlu ditemukan dan dikonversi.

  • tingkat_isolasi (kuat | Tidak ada) – Mengontrol perilaku penanganan transaksi lama. LihatKoneksi.tingkat_isolasiDanKontrol transaksi melalui atribut separation_leveluntuk informasi lebih lanjut. Dapat"DEFERRED"(bawaan),"EXCLUSIVE"atau"IMMEDIATE"; atauNoneuntuk menonaktifkan pembukaan transaksi secara implisit. Tidak berpengaruh kecualiKoneksi.komit otomatisdiatur untukKONTROL_TRANSAKSI_LEGACY(bawaan).
    isolation_level(String | Tidak Ada) – Mengontrol perilaku pemrosesan transaksi lama.Untuk informasi lebih lanjut, lihatConnection.isolation_leveldan "lulusisolation_levelTransaksi Penguasaan Properti". Bisa jadi"DEFERRED"(nilai bawaan),"EXCLUSIVE"atau"IMMEDIATE";atau disetel keNone untuk menonaktifkan secara implisit membuka transaksi secara implisit.KecualiConnection.autocommitDitetapkan sebagaiLEGACY_TRANSACTION_CONTROL(default), jika tidak, pengaturan ini tidak akan berpengaruh.

  • periksa_utas_yang_sama (bool) - JikaTrue(bawaan),Kesalahan Pemrogramanakan dimunculkan jika koneksi database digunakan oleh thread selain thread yang membuatnya. JikaFalse, koneksi dapat diakses dalam beberapa thread; operasi penulisan mungkin perlu diserialkan oleh pengguna untuk menghindari kerusakan data. Lihatkeamanan benanguntuk informasi lebih lanjut.
    check_same_thread(Nilai Boolean) – Jika diatur keTrue(default), akan dimunculkan ketika koneksi database digunakan oleh thread selain thread yang membuatnya.ProgrammingError abnormal.Jika diatur keFalse , beberapa thread diperbolehkan untuk mengakses koneksi; tetapi pengguna mungkin perlu membuat serialisasi (terus menerus) operasi penulisan sendiri untuk menghindari kerusakan data.Untuk informasi lebih lanjut lihatthreadsafetyinstruksi dari.

  • pabrik (Koneksi) – Subkelas kustom dariKoneksiuntuk membuat koneksi dengan, jika bukan defaultKoneksikelas.
    factory(Koneksi) – Jika tidak menggunakan defaultConnectionkelas, tentukan kebiasaanConnection Subkelas untuk membuat koneksi. Parameter ini memungkinkan Anda untuk menyesuaikan perilaku koneksi database sesuai dengan kebutuhan atau ekstensi tertentu.

  • pernyataan_yang_di-cache (ke dalam) – Jumlah pernyataan yangsqlite3harus menyimpan cache internal untuk koneksi ini, untuk menghindari overhead parsing. Secara default, 128 pernyataan.
    cached_statements(dalam) – sqlite3 Jumlah pernyataan yang harus di-cache secara internal untuk koneksi ini guna menghindari overhead penguraian. Secara default, 128 pernyataan di-cache. Parameter ini memungkinkan Anda menyesuaikan ukuran cache untuk mengoptimalkan kinerja atau penggunaan memori.

  • air seni (bool) – Jika diatur keTruebasis dataditafsirkan sebagai URI dengan jalur file dan string kueri opsional. Bagian skemaharusmenjadi"file:", dan jalurnya bisa relatif atau absolut. String kueri memungkinkan pengiriman parameter ke SQLite, memungkinkan berbagaiCara bekerja dengan URI SQLite.
    uri(bool) – Jika diatur keTrue,Tetapidatabase Ditafsirkan sebagai Uniform Resource Identifier (URI) dengan jalur file dan string kueri opsional. Skema bagian dari URIharus adalah "file:", jalurnya bisa relatif atau absolut. String kueri memungkinkan parameter diteruskan ke SQLite, memungkinkan berbagai cara bekerja dengan URI SQLite. Hal ini memungkinkan opsi koneksi database yang lebih kompleks, seperti mengatur mode read-only, menentukan ukuran cache, dll.

  • komit otomatis (bool) – KontrolPEP 249perilaku penanganan transaksi. LihatKoneksi.komit otomatisDanKontrol transaksi melalui atribut autocommituntuk informasi lebih lanjut.komit otomatissaat ini default keKONTROL_TRANSAKSI_LEGACY. Default akan berubah menjadiFalsedalam rilis Python mendatang.
    autocommit(bool) – Mengontrol perilaku pemrosesan transaksi sesuai dengan PEP 249.Untuk informasi lebih lanjut, lihatConnection.autocommit dan "Mengontrol transaksi melalui atribut autocommit." saat sekarang,autocommitNilai default diatur keLEGACY_TRANSACTION_CONTROL , yang berarti mengikuti perilaku kontrol transaksi lama dari spesifikasi Python Database API (PEP 249).Namun, di versi Python yang akan datang, defaultnya akan berubah menjadiFalse, yang berarti bahwa transaksi tidak dilakukan secara otomatis secara default dan mengharuskan pengguna untuk secara eksplisit mengontrol awal dan akhir transaksi.

Tolong dicatat,*Parameter digunakan dalam definisi fungsi sebagai pemisah antara argumen posisi dan kata kunci, artinyaautocommitSemua parameter setelah itu harus berupa parameter kata kunci.

Tipe pengembalian:Jenis pengembalian: 

Koneksi

Menaikkanacara audit sqlite3.connectdengan argumendatabase.
sqlite3.connect: Ketika menggunakandatabaseParameter yang ditampilkan saat menyambung ke database.

Menaikkanacara audit sqlite3.connect/handledengan argumenconnection_handle.
sqlite3.connect/handle: Saat koneksi menangani (connection_handle) dilempar saat dibuat.

Diubah dalam versi 3.4: Menambahkanair seniparameter.
Di versi 3.4: ditambahkanuriParameter yang memungkinkan penentuan file database menggunakan format URI.

Diubah dalam versi 3.7:basis datasekarang juga bisa menjadiobjek seperti jalur, bukan hanya seutas tali.
Di versi 3.7:databaseParameter kini dapat berupa objek seperti jalur, bukan sekadar string.

Diubah dalam versi 3.10: Menambahkansqlite3.connect/handleacara audit.
Di versi 3.10: ditambahkansqlite3.connect/handlePeristiwa audit, yang dipicu ketika pegangan koneksi dibuat.

Diubah dalam versi 3.12: Menambahkankomit otomatisparameter.
Di versi 3.12: ditambahkanautocommitParameter yang memungkinkan kontrol yang lebih baik atas perilaku transaksi yang dilakukan secara otomatis.

sqlite3.pernyataan_lengkap(penyataan)

KembaliTruejika talipenyataantampaknya berisi satu atau beberapa pernyataan SQL yang lengkap. Tidak ada verifikasi sintaksis atau penguraian apa pun yang dilakukan, selain memeriksa bahwa tidak ada string literal yang tidak ditutup dan pernyataan diakhiri dengan titik koma.
jika stringstatementtampaknya berisi satu atau lebih pernyataan SQL lengkap, lalu kembaliTrue . Tidak ada validasi atau penguraian sintaksis yang dilakukan selain memeriksa bahwa tidak ada literal string yang tidak tertutup dan pernyataan diakhiri dengan titik koma.

Misalnya:Contoh

>>>

  1. >>> sqlite3.complete_statement("SELECT foo FROM bar;")
  2. True
  3. >>> sqlite3.complete_statement("SELECT foo")
  4. False

Fungsi ini mungkin berguna selama input baris perintah untuk menentukan apakah teks yang dimasukkan tampaknya membentuk pernyataan SQL yang lengkap, atau jika input tambahan diperlukan sebelum memanggilmenjalankan().
Fungsi ini mungkin berguna saat mengetik di baris perintah, untuk membantu menentukan apakah teks yang dimasukkan terlihat seperti pernyataan SQL lengkap, atau saat memanggilexecute()Apakah masukan tambahan diperlukan sebelumnya.

Melihatrunsource()di dalamLib/sqlite3/__main__.pyuntuk penggunaan di dunia nyata.
Dalam aplikasi praktis, Anda dapat merujuk keLib/sqlite3/__main__.pytengahrunsource()berfungsi untuk memahami penggunaannya.

sqlite3.aktifkan_callback_tracebacks(bendera/)

Mengaktifkan atau menonaktifkan traceback panggilan balik. Secara default Anda tidak akan mendapatkan traceback apa pun dalam fungsi yang ditentukan pengguna, agregat, konverter, panggilan balik otorisasi, dll. Jika Anda ingin men-debugnya, Anda dapat memanggil fungsi ini denganbenderamulaiTrueSetelah itu, Anda akan mendapatkan traceback dari panggilan balik disistem stderr. MenggunakanFalseuntuk menonaktifkan fitur tersebut lagi.
Mengaktifkan atau menonaktifkan pelacakan panggilan balik. Secara default, Anda tidak akan mendapatkan penelusuran balik apa pun dalam fungsi yang ditentukan pengguna, fungsi agregat, konverter, panggilan balik otorisasi, dll.Jika Anda ingin men-debugnya, Anda dapat memanggil fungsi ini dan menggantinyaflagDitetapkan sebagaiTrue .Setelah itu, Anda akan bisasys.stderr Dapatkan informasi jejak dari panggilan balik.menggunakanFalseuntuk menonaktifkan fitur ini lagi.

Catatan

Kesalahan dalam panggilan balik fungsi yang ditentukan pengguna dicatat sebagai pengecualian yang tidak dapat diajukan. Gunakanpemegang kait yang tidak dapat diangkatuntuk introspeksi terhadap panggilan balik yang gagal.
Kesalahan dalam callback fungsi yang ditentukan pengguna dicatat sebagai pengecualian yang tidak dapat ditangkap. Gunakan penangan kait yang tidak dapat diangkat untuk melakukan introspeksi pada panggilan balik yang gagal.

 

Ini berarti bahwa ketika kesalahan terjadi dalam panggilan balik fungsi yang ditentukan pengguna SQLite (seperti fungsi agregat, fungsi skalar, dll.), kesalahan ini tidak terjadi seperti pengecualian Python normal dan dapat ditangkap oleh blok coba-kecuali. Sebaliknya, mereka ditangkap oleh modul sqlite3 SQLite atau Python dan dicatat dengan cara tertentu (biasanya ditulis ke log atau output kesalahan standar), tetapi tidak mengganggu eksekusi program (kecuali kesalahannya sangat serius).

Untuk memeriksa dan men-debug pengecualian yang tidak dapat ditangkap ini, Anda dapat menyiapkan "penangan kait yang tidak dapat ditangkap". Penangan ini adalah fungsi yang dipanggil Python ketika terjadi pengecualian yang tidak tertangkap, meneruskan informasi pengecualian sebagai parameter. Dengan cara ini, Anda dapat menulis kode dalam fungsi prosesor untuk mencatat atau memeriksa pengecualian ini guna membantu mendiagnosis masalah.

Harap dicatat bahwa implementasi spesifik dapat bervariasi tergantung pada versi Python dan detail implementasi modul sqlite3. Oleh karena itu, disarankan untuk membaca dokumentasi Python terbaru atau dokumentasi modul sqlite3 untuk mempelajari cara menyiapkan dan menggunakan penangan kait yang tidak dapat ditangkap.

sqlite3.register_adapter(jenisadaptor/)

Daftarkan sebuahadaptor dapat dipanggiluntuk mengadaptasi tipe Pythonjenismenjadi tipe SQLite. Adaptor dipanggil dengan objek Python bertipejenissebagai satu-satunya argumennya, dan harus mengembalikan nilaiketik yang dipahami SQLite secara asli.
Daftarkan objek yang dapat dipanggil **adaptor** untuk mengonversi Pythontype Tipe ini disesuaikan dengan tipe yang dapat dipahami secara asli oleh SQLite.Fungsi adaptor ini membutuhkan atypeObjek bertipe disebut sebagai satu-satunya argumen dan harus mengembalikan nilai tipe yang didukung secara asli oleh SQLite.
 

Perlu dicatat bahwa "typetype" mungkin sedikit menyesatkan, karena biasanya kita tidak mengacu pada bawaan Pythontype Objek (yaitu tipenya sendiri) disimpan langsung ke dalam database. Lebih umum lagi, kita ingin mengadaptasi objek dengan Python (yang mungkin merupakan contoh tipe khusus) ke dalam format yang dapat disimpan oleh SQLite.Namun, pahami kalimat itu secara harfiah, jika Anda memang perlu menghadapinyatypeobjek itu sendiri (meskipun hal ini jarang terjadi dalam praktiknya), Anda harus menulis adaptor untuk mengubahnya menjadi beberapa bentuk yang dapat disimpan SQLite, seperti string yang mewakili nama tipenya.

Namun, kasus penggunaan yang lebih umum adalah untuk tipe Python khusus atau tipe bawaan sepertidatetimedecimal.Decimaldll.) menulis adaptor sehingga dapat disimpan dan diambil dengan benar oleh database SQLite.

Misalnya, jika Anda memiliki kelas Python khususMyClass, dan ingin menyimpan instance-nya dalam database SQLite, Anda dapat menulis adaptor untuk mengonversi instance kelas ini menjadi string (atau tipe lainnya) yang dapat disimpan oleh SQLite, lalu menulis konverter untuk mengonversi Konversikan string ini kembali keMyClasscontoh.

Namun, untuk pertanyaan ini, jika Anda hanya ingin berurusan dengan Pythontypeobjek (yaitu metadata tipenya), Anda dapat menulis adaptor untuk mengembalikan nama tipe tersebut (sebagai string), tetapi ini umumnya bukan praktik umum untuk menyimpan objek ke dalam database.

sqlite3.register_konverter(ketik namakonverter/)

Daftarkankonverter dapat dipanggiluntuk mengonversi objek SQLite bertipeketik namamenjadi objek Python dengan tipe tertentu. Konverter dipanggil untuk semua nilai SQLite bertipeketik nama; itu dilewatkanbyte dalam bahasa inggrisobjek dan harus mengembalikan objek dengan tipe Python yang diinginkan. Lihat parametermendeteksi_jenisdariMenghubung()untuk informasi mengenai cara kerja deteksi tipe.
Daftarkan objek **converter** yang dapat dipanggil untuk mengonversi tipe SQLitetypename Mengonversi objek menjadi objek Python dengan tipe tertentu.Untuk semua tipetypenameKonverter ini dipanggil untuk nilai SQLite apa pun;bytes objek sebagai argumen dan harus mengembalikan objek dengan tipe Python yang diperlukan.Untuk cara kerja deteksi tipe, silakan merujuk keconnect()Fungsionaldetect_typesparameter.

Catatan:ketik namadan nama tipe pada kueri Anda dicocokkan tanpa memperhatikan huruf besar/kecil.
MelihattypenameNama tipe dalam kueri tidak peka huruf besar-kecil saat mencocokkan.

Konstanta modul

sqlite3.KONTROL_TRANSAKSI_LEGACY

Mengaturkomit otomatiske konstanta ini untuk memilih perilaku kontrol transaksi gaya lama (pra-Python 3.12). LihatKontrol transaksi melalui atribut separation_leveluntuk informasi lebih lanjut.
Akanautocommit Setel ke konstanta ini untuk memilih perilaku kontrol transaksi gaya lama (sebelum Python 3.12).Untuk informasi lebih lanjut, silakan lihat "Lulusisolation_levelTransaksi kontrol properti".

sqlite3.PARSE_COLNAMES

Lewatkan nilai bendera ini kemendeteksi_jenisparameter dariMenghubung()untuk mencari fungsi konverter dengan menggunakan nama tipe, yang diurai dari nama kolom kueri, sebagai kunci kamus konverter. Nama tipe harus diapit tanda kurung siku ([]).
Teruskan nilai tanda ini keconnect()Fungsionaldetect_types Parameter untuk menemukan fungsi konverter dengan menanyakan nama tipe yang diselesaikan di nama kolom sebagai kunci kamus konverter. Nama tipe harus diapit tanda kurung siku ([]).

SELECT p as "p [point]" FROM test;  ! will look up converter "point"

Bendera ini dapat digabungkan denganPARSE_DECLTYPESmenggunakan|operator (bitwise atau).
Bendera ini dapat digunakan|(bitwise ATAU) operator DANPARSE_DECLTYPESSetara dengan.

sqlite3.PARSE_DECLTYPES

Lewatkan nilai bendera ini kemendeteksi_jenisparameter dariMenghubung()untuk mencari fungsi konverter menggunakan tipe yang dideklarasikan untuk setiap kolom. Tipe dideklarasikan saat tabel basis data dibuat.sqlite3akan mencari fungsi konverter menggunakan kata pertama dari tipe yang dideklarasikan sebagai kunci kamus konverter. Misalnya:
Teruskan nilai tanda ini keconnect()Fungsionaldetect_types Parameter untuk mencari fungsi konverter menggunakan tipe yang dideklarasikan dari setiap kolom dalam database. Tipe ini dideklarasikan saat membuat tabel database.sqlite3 Fungsi konverter akan dicari menggunakan kata pertama dalam tipe yang dideklarasikan sebagai kunci kamus konverter. Misalnya:

  1. CREATE TABLE test(
  2. i integer primary key, ! will look up a converter named "integer"
  3. p point, ! will look up a converter named "point"
  4. n number(10) ! will look up a converter named "number"
  5. )

Bendera ini dapat digabungkan denganPARSE_NAMA_KOLOMmenggunakan|operator (bitwise atau).

sqlite3.SQLITE_OK
sqlite3.SQLITE_MENOLAK
sqlite3.SQLITE_ABAIKAN

Bendera yang harus dikembalikan olehpemberi kuasa_panggilan_balik dapat dipanggilditeruskan keKoneksi.set_authorizer(), untuk menunjukkan apakah:
Diberikan kepadaConnection.set_authorizer()dariauthorizer_callbackTanda yang harus ditunjukkan oleh fungsi yang dapat dipanggil:

  • Akses diizinkan (SQLITE_OK), akses diperbolehkan (SQLITE_OK

  • Pernyataan SQL harus dibatalkan dengan kesalahan (SQLITE_DENY)
    Pernyataan SQL harus dibatalkan karena kesalahan (SQLITE_DENY

  • Kolom harus diperlakukan sebagaiNULLnilai (SQLITE_IGNORE)
    Kolom harus diperlakukan sebagai nilai NULL (SQLITE_IGNORE

sqlite3.apilevel

Konstanta string yang menyatakan level DB-API yang didukung. Diperlukan oleh DB-API. Dikodekan secara permanen ke"2.0".
Kedua konstanta string ini adalahsqlite3Didefinisikan dalam modul, mereka mengikuti spesifikasi Python Database API (DB-API).

sqlite3.paramstyle

Konstanta string yang menyatakan jenis format penanda parameter yang diharapkan olehsqlite3modul. Diperlukan oleh DB-API. Dikodekan secara keras ke"qmark".
Konstanta string ini menentukansqlite3 Jenis pemformatan penanda parameter yang diharapkan oleh modul. Hal ini diperlukan oleh spesifikasi DB-API (Database Application Programming Interface).Ini dikodekan sebagai"qmark", artinya saat membuat kueri SQL, penanda parameter harus diwakili oleh tanda tanya (?).

Catatan

ItunamedGaya parameter DB-API juga didukung.

sqlite3.sqlite_versi

Nomor versi pustaka SQLite runtime sebagairangkaian.
Nomor versi perpustakaan runtime SQLite, dinyatakan dalam bentuk string.

sqlite3.info_versi_sqlite

Nomor versi pustaka SQLite runtime sebagaitupeldaribilangan bulat.
Nomor versi perpustakaan runtime SQLite, dinyatakan sebagai tupel bilangan bulat.

sqlite3.keamanan utas

Konstanta integer yang diperlukan oleh DB-API 2.0, yang menyatakan tingkat keamanan threadsqlite3modul mendukung. Atribut ini diatur berdasarkan defaultmode pemasangan benangpustaka SQLite yang mendasarinya dikompilasi dengan. Mode threading SQLite adalah:
Konstanta bilangan bulat yang dibutuhkan oleh DB-API 2.0, menunjukkansqlite3 Tingkat keamanan thread yang didukung oleh modul. Properti ini disetel sesuai dengan mode threading default yang digunakan untuk mengkompilasi pustaka SQLite. Mode threading SQLite meliputi:

  1. Benang tunggal: Dalam mode ini, semua mutex dinonaktifkan dan SQLite tidak aman untuk digunakan di lebih dari satu thread sekaligus.
    Thread tunggal: Dalam mode ini, semua mutex dinonaktifkan dan SQLite tidak aman untuk digunakan oleh banyak thread secara bersamaan.

  2. Multi-utas: Dalam mode ini, SQLite dapat digunakan dengan aman oleh beberapa thread asalkan tidak ada koneksi basis data tunggal yang digunakan secara bersamaan dalam dua atau lebih thread.
    Multi-thread: Dalam mode ini, SQLite dapat digunakan dengan aman oleh banyak thread, asalkan tidak ada koneksi database tunggal yang digunakan secara bersamaan oleh dua atau lebih thread.

  3. Diserialkan: Dalam mode serial, SQLite dapat digunakan dengan aman oleh banyak thread tanpa batasan.
    Berseri: Dalam mode serial, SQLite dapat digunakan dengan aman oleh banyak thread tanpa batasan apa pun.

Pemetaan dari mode threading SQLite ke tingkat threadsafety DB-API 2.0 adalah sebagai berikut:
Pemetaan mode thread SQLite ke tingkat keamanan thread DB-API 2.0 adalah sebagai berikut:

Mode penguliran SQLite

keamanan benang

SQLITE_THREADSAFE

Arti DB-API 2.0

benang tunggal

0

0

Thread tidak dapat berbagi modul

multi-utas

1

2

Thread dapat berbagi modul, tetapi tidak koneksi

diserialkan

3

1

Thread dapat berbagi modul, koneksi, dan kursor

Diubah dalam versi 3.11: Setelkeamanan benangsecara dinamis daripada mengkodekannya secara keras ke1.

sqlite3.versi

Nomor versi modul ini sebagairangkaianIni bukan versi pustaka SQLite.
Nomor versi modul ini, dinyatakan sebagai string.iniTIDAKNomor versi perpustakaan SQLite.

Tidak digunakan lagi sejak versi 3.12, akan dihapus di versi 3.14: Konstanta ini digunakan untuk mencerminkan nomor versipysqlitepaket, pustaka pihak ketiga yang digunakan untuk meng-upstream perubahan kesqlite3Saat ini, hal itu tidak memiliki makna atau nilai praktis.
Tidak digunakan lagi sejak versi 3.12, akan dihapus di versi 3.14: Konstanta ini digunakan untuk mencerminkanpysqliteNomor versi paket,pysqliteIni adalah perpustakaan pihak ketiga yang telah diunggah ke upstreamsqlite3 Komit perubahannya. Sekarang, hal itu tidak memiliki arti atau nilai praktis yang sebenarnya.

sqlite3.info versi

Nomor versi modul ini sebagaitupeldaribilangan bulatIni bukan versi pustaka SQLite.

Tidak digunakan lagi sejak versi 3.12, akan dihapus di versi 3.14: Konstanta ini digunakan untuk mencerminkan nomor versipysqlitepaket, pustaka pihak ketiga yang digunakan untuk meng-upstream perubahan kesqlite3Saat ini, hal itu tidak memiliki makna atau nilai praktis.

sqlite3.SQLITE_DBCONFIG_DEFENSIF
sqlite3.konfigurasi_db_sqlite_dqs_ddl
sqlite3.konfigurasi_db_sqlite_dqs_dml
sqlite3.SQLITE_DBCONFIG_AKTIFKAN_FKEY
sqlite3.SQLITE_DBCONFIG_AKTIFKAN_TOKENIZER_FTS3
sqlite3.SQLITE_DBCONFIG_AKTIFKAN_LOAD_EXTENSION
sqlite3.SQLITE_DBCONFIG_AKTIFKAN_QPSG
sqlite3.SQLITE_DBCONFIG_AKTIFKAN_PEMICU
sqlite3.SQLITE_DBCONFIG_AKTIFKAN_LIHAT
sqlite3.SQLITE_DBCONFIG_LEGACY_MENGUBAH_TABEL
sqlite3.FORMAT_FILE_LEGACY_SQLITE_DBCONFIG
sqlite3.SQLITE_DBCONFIG_TIDAK_ADA_CKPT_PADA_PENUTUPAN
sqlite3.SET_RESET_BASIS_DATA_DBCONFIG_SQLITE
sqlite3.pemicu_dbkonfigurasi_sqlite_eqp
sqlite3.SQLITE_DBCONFIG_SKEMA_TERPERCAYA
sqlite3.SQLITE_DBCONFIG_SKEMA_YANG_DAPAT_DITULIS

Konstanta ini digunakan untukKoneksi.setconfig()Dandapatkan konfigurasi()metode.
Konstanta ini digunakanConnection.setconfig()Dangetconfig()metode.

Ketersediaan konstanta ini bervariasi bergantung pada versi SQLite yang dikompilasi Python.
Ketersediaan konstanta ini bergantung pada versi SQLite yang digunakan SQLite Python untuk dikompilasi.

Ditambahkan dalam versi 3.12.

Lihat juga

Opsi Konfigurasi Koneksi Basis Data

Dokumen SQLite: Opsi Konfigurasi Koneksi Basis Data

Objek koneksi

kelassqlite3.Koneksi

Setiap database SQLite terbuka diwakili olehConnectionobjek yang dibuat menggunakansqlite3.koneksi()Tujuan utama mereka adalah menciptakanKursorobjek, danKontrol transaksi.

Lihat juga

Koneksi database SQLite memiliki atribut dan metode berikut:

kursor(pabrik=Kursor)

Buat dan kembalikanKursorobjek. Metode kursor menerima satu parameter opsionalpabrikJika disediakan, ini harus berupadapat dipanggilmengembalikan contohKursoratau subkelasnya.
Membuat a dan mengembalikan aCursorobyek.cursorMetode menerima parameter tunggal opsionalfactory .Jika parameter ini disediakan, maka harus berupa objek callable yang mengembalikan aCursoratau turunan dari subkelasnya.

blob terbuka(mejakolombaris/*hanya-baca=Salahnama='utama')

Buka sebuahGumpalmenangani BLOB yang ada.

Parameternya:

  • meja (kuat) – Nama tabel tempat blob berada.
    Nama tabel yang berisi data BLOB.

  • kolom (kuat) – Nama kolom tempat blob berada.
    Nama kolom yang berisi data BLOB.

  • baris (kuat) – Nama baris tempat blob berada.
    Nama baris (atau lebih tepatnya pengidentifikasi baris) yang berisi data BLOB.

  • hanya bisa dibaca (bool) - MulaiTruejika blob harus dibuka tanpa izin menulis. Defaultnya adalahFalse.
    Jika diatur ke True, ini menunjukkan bahwa BLOB harus dibuka tanpa izin menulis. Standarnya adalah False, yang memungkinkan membaca dan menulis.

  • nama (kuat) – Nama database tempat blob berada. Defaultnya adalah"main".
    Nama database yang berisi data BLOB. Defaultnya adalah "main", yang merupakan nama database default di SQLite.

Menaikkan:

Kesalahan Operasional– Saat mencoba membuka gumpalan diWITHOUT ROWIDmeja.
Saat mencoba tanpaBARISTerjadi ketika data BLOB dibuka pada tabel ID.

Tipe pengembalian:

Gumpal

Catatan

Ukuran gumpalan tidak dapat diubah menggunakanGumpalkelas. Gunakan fungsi SQLzeroblobuntuk membuat gumpalan dengan ukuran tetap.

Ditambahkan dalam versi 3.11.

melakukan()

Komit setiap transaksi yang tertunda ke database. Jikakomit otomatisadalahTrue, atau tidak ada transaksi terbuka, metode ini tidak melakukan apa pun. JikaautocommitadalahFalse, transaksi baru secara implisit dibuka jika transaksi yang tertunda dilakukan oleh metode ini.
Komit semua transaksi yang tertunda ke database.jikaautocommit Benar, atau tidak ada transaksi terbuka, metode ini tidak melakukan operasi apa pun.jikaautocommitadalah False, dan metode ini melakukan transaksi yang tertunda, transaksi baru akan dimulai secara implisit.

kembalikan()

Putar kembali ke awal transaksi yang tertunda. Jikakomit otomatisadalahTrue, atau tidak ada transaksi terbuka, metode ini tidak melakukan apa pun. JikaautocommitadalahFalse, transaksi baru secara implisit dibuka jika transaksi yang tertunda dibatalkan oleh metode ini.
Kembalikan ke awal transaksi yang tertunda.jikaautocommit Benar, atau tidak ada transaksi terbuka, metode ini tidak melakukan operasi apa pun.jikaautocommitadalah False, dan metode ini mengembalikan transaksi yang tertunda, transaksi baru akan dimulai secara implisit.

menutup()

Tutup koneksi database. Jikakomit otomatisadalahFalse, setiap transaksi yang tertunda secara implisit dibatalkan. JikaautocommitadalahTrueatauKONTROL_TRANSAKSI_LEGACY, tidak ada kontrol transaksi implisit yang dijalankan. Pastikan untukmelakukan()sebelum menutup untuk menghindari kehilangan perubahan yang tertunda.
Tutup koneksi basis data.jikaautocommit Jika Salah, setiap transaksi yang tertunda akan dibatalkan secara implisit.jikaautocommitapakah Benar atauLEGACY_TRANSACTION_CONTROL (kontrol transaksi lama), kontrol transaksi implisit tidak akan dilakukan.Sebelum menutup pastikan untuk meneleponcommit()untuk menghindari kehilangan perubahan yang tertunda.

menjalankan(bahasa inggrisparameter=()/)

Buat yang baruKursorobjek dan panggilanmenjalankan()di atasnya dengan yang diberikanbahasa inggrisDanParameterMengembalikan objek kursor baru.
membuat yang baruCursorobjek dan panggilanexecute()metode, meneruskan yang diberikansql pernyataan dan parameter.kembalikan ini yang baruCursorobyek.

mengeksekusibanyak(bahasa inggrisParameter/)

Buat yang baruKursorobjek dan panggilanmengeksekusibanyak()di atasnya dengan yang diberikanbahasa inggrisDanParameterMengembalikan objek kursor baru.
membuat yang baruCursorobjek dan panggilanexecutemany()metode, meneruskan yang diberikansql Pernyataan dan urutan parameter. Hal ini memungkinkan beberapa set parameter dijalankan sekaligus.kembalikan ini yang baruCursorobyek.

eksekusi skrip(skrip sql/)

Buat yang baruKursorobjek dan panggilaneksekusi skrip()di atasnya dengan yang diberikanskrip sqlMengembalikan objek kursor baru.
membuat yang baruCursorobjek dan panggilanexecutescript() metode, meneruskan skrip SQL yang diberikan. Hal ini memungkinkan eksekusi beberapa pernyataan SQL, dipisahkan dengan titik koma dalam skrip.kembalikan ini yang baruCursorobyek.

membuat_fungsi(namanarkotikafungsi*deterministik=Salah)

Membuat atau menghapus fungsi SQL yang ditentukan pengguna.
Membuat atau menghapus fungsi SQL yang ditentukan pengguna.

Parameternya:

  • nama (kuat) – Nama fungsi SQL.
    name(str) – Nama fungsi SQL.

  • narkotika (ke dalam) – Jumlah argumen yang dapat diterima fungsi SQL. Jika-1, mungkin diperlukan sejumlah argumen.
    narg (int) – Jumlah argumen yang dapat diterima fungsi SQL. Jika -1, berarti dapat menerima sejumlah argumen.

  • fungsi (panggilan balik| Tidak ada) – Adapat dipanggilyang dipanggil saat fungsi SQL dipanggil. Yang dapat dipanggil harus mengembalikantipe yang didukung secara native oleh SQLite. MulaiNoneuntuk menghapus fungsi SQL yang ada.
    func (callback | Tidak ada) – Objek yang dapat dipanggil (callback) ini akan dieksekusi ketika fungsi SQL dipanggil. Objek yang dapat dipanggil ini harus mengembalikan tipe yang didukung secara asli oleh SQLite. Jika diatur ke Tidak Ada, fungsi SQL yang ada akan dihapus.

  • deterministik (bool) - JikaTrue, fungsi SQL yang dibuat ditandai sebagaideterministik, yang memungkinkan SQLite melakukan pengoptimalan tambahan.
    deterministic(bool) – Jika Benar, tandai fungsi SQL yang dibuat sebagai deterministik, yang memungkinkan SQLite melakukan pengoptimalan tambahan.

Menaikkan:

Kesalahan TidakDidukung- Jikadeterministikdigunakan dengan versi SQLite yang lebih lama dari 3.8.3.

Diubah dalam versi 3.8: Menambahkandeterministikparameter.

Contoh:

>>>

  1. >>> import hashlib
  2. >>> def md5sum(t):
  3. ... return hashlib.md5(t).hexdigest()
  4. >>> con = sqlite3.connect(":memory:")
  5. >>> con.create_function("md5", 1, md5sum)
  6. >>> for row in con.execute("SELECT md5(?)", (b"foo",)):
  7. ... print(row)
  8. ('acbd18db4cc2f85cedef654fccc4a4d8',)
  9. >>> con.close()
membuat_agregat(naman_argagregat_kelas)

Membuat atau menghapus fungsi agregat SQL yang ditentukan pengguna.
Membuat atau menghapus fungsi agregat SQL yang ditentukan pengguna.

Parameternya:

  • nama (kuat) – Nama fungsi agregat SQL.
         name(str) – Nama fungsi agregat SQL.

  • n_arg (ke dalam) – Jumlah argumen yang dapat diterima oleh fungsi agregat SQL. Jika-1, mungkin diperlukan sejumlah argumen.
    Jumlah parameter yang dapat diterima oleh fungsi agregat SQL. Jika -1, berarti dapat menerima sejumlah argumen.

  • agregat_kelas (kelas| Tidak ada) –

    Suatu kelas harus mengimplementasikan metode berikut:
    Sebuah kelas harus mengimplementasikan metode berikut:

    Jumlah argumen yangstep()metode harus menerima dikendalikan olehn_arg.
    step()Jumlah parameter yang harus diterima suatu metode diberikan olehn_argkontrol.

    MulaiNoneuntuk menghapus fungsi agregat SQL yang ada.
    Ditetapkan sebagaiNoneuntuk menghapus fungsi agregat SQL yang ada.

Contoh:

  1. class MySum:
  2. def __init__(self):
  3. self.count = 0
  4. def step(self, value):
  5. self.count += value
  6. def finalize(self):
  7. return self.count
  8. con = sqlite3.connect(":memory:")
  9. con.create_aggregate("mysum", 1, MySum)
  10. cur = con.execute("CREATE TABLE test(i)")
  11. cur.execute("INSERT INTO test(i) VALUES(1)")
  12. cur.execute("INSERT INTO test(i) VALUES(2)")
  13. cur.execute("SELECT mysum(i) FROM test")
  14. print(cur.fetchone()[0])
  15. con.close()
membuat_fungsi_jendela(namajumlah_parameteragregat_kelas/)

Membuat atau menghapus fungsi jendela agregat yang ditentukan pengguna.

Parameternya:

  • nama (kuat) – Nama fungsi jendela agregat SQL yang akan dibuat atau dihapus.

  • jumlah_parameter (ke dalam) – Jumlah argumen yang dapat diterima oleh fungsi jendela agregat SQL. Jika-1, mungkin diperlukan sejumlah argumen.

  • agregat_kelas (kelas| Tidak ada) –

    Kelas yang harus mengimplementasikan metode berikut:

    • step(): Tambahkan baris ke jendela saat ini.

    • value(): Mengembalikan nilai agregat saat ini.

    • inverse(): Hapus baris dari jendela saat ini.

    • finalize(): Mengembalikan hasil akhir agregat sebagaitipe yang didukung secara native oleh SQLite.

    Jumlah argumen yangstep()Danvalue()metode harus menerima dikendalikan olehjumlah_parameter.

    MulaiNoneuntuk menghapus fungsi jendela agregat SQL yang ada.

Menaikkan:

Kesalahan TidakDidukung– Jika digunakan dengan versi SQLite yang lebih lama dari 3.25.0, yang tidak mendukung fungsi jendela agregat.

Ditambahkan dalam versi 3.11.

Contoh:

# Example taken from https://www.sqlite.org/windowfunctions.html#udfwinfunc
class WindowSumInt:
    def __init__(self):
        self.count = 0

    def step(self, value):
        """Add a row to the current window."""
        self.count += value

    def value(self):
        """Return the current value of the aggregate."""
        return self.count

    def inverse(self, value):
        """Remove a row from the current window."""
        self.count -= value

    def finalize(self):
        """Return the final value of the aggregate.

        Any clean-up actions should be placed here.
        """
        return self.count


con = sqlite3.connect(":memory:")
cur = con.execute("CREATE TABLE test(x, y)")
values = [
    ("a", 4),
    ("b", 5),
    ("c", 3),
    ("d", 8),
    ("e", 1),
]
cur.executemany("INSERT INTO test VALUES(?, ?)", values)
con.create_window_function("sumint", 1, WindowSumInt)
cur.execute("""
    SELECT x, sumint(y) OVER (
        ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
    ) AS sum_y
    FROM test ORDER BY x
""")
print(cur.fetchall())
con.close()

buat_kolasi(namadapat dipanggil/)

Buat kolasi bernamanamamenggunakan fungsi penyortirandapat dipanggildapat dipanggilsudah melewati duarangkaianargumen, dan itu harus mengembalikanbilangan bulat:

  • 1jika yang pertama diurutkan lebih tinggi dari yang kedua

  • -1jika yang pertama diurutkan lebih rendah dari yang kedua

  • 0jika mereka diurutkan sama

Contoh berikut menunjukkan pengurutan terbalik:

def collate_reverse(string1, string2):
    if string1 == string2:
        return 0
    elif string1 < string2:
        return 1
    else:
        return -1

con = sqlite3.connect(":memory:")
con.create_collation("reverse", collate_reverse)

cur = con.execute("CREATE TABLE test(x)")
cur.executemany("INSERT INTO test(x) VALUES(?)", [("a",), ("b",)])
cur.execute("SELECT x FROM test ORDER BY x COLLATE reverse")
for row in cur:
    print(row)
con.close()

Hapus fungsi kolasi dengan menyeteldapat dipanggilkeNone.

Diubah pada versi 3.11: Nama kolasi dapat berisi karakter Unicode apa pun. Sebelumnya, hanya karakter ASCII yang diizinkan.

mengganggu()

Panggil metode ini dari thread lain untuk membatalkan permintaan yang mungkin sedang dijalankan pada koneksi. Permintaan yang dibatalkan akan menimbulkanKesalahan Operasional.

set_otorisasi(pemberi kuasa_panggilan_balik)

Daftardapat dipanggil pemberi kuasa_panggilan_balikdipanggil untuk setiap upaya mengakses kolom tabel dalam database. Panggilan balik harus mengembalikan salah satuSQLITE_BaiklahSQLITE_MENOLAK, atauSQLITE_ABAIKANuntuk memberi sinyal bagaimana akses ke kolom harus ditangani oleh pustaka SQLite yang mendasarinya.

Argumen pertama untuk panggilan balik menandakan jenis operasi apa yang akan diotorisasi. Argumen kedua dan ketiga akan menjadi argumen atauNonetergantung pada argumen pertama. Argumen ke-4 adalah nama database (“main”, “temp”, dll.) jika berlaku. Argumen ke-5 adalah nama pemicu atau tampilan paling dalam yang bertanggung jawab atas upaya akses atauNonejika upaya akses ini langsung dari kode SQL input.

Silakan lihat dokumentasi SQLite tentang kemungkinan nilai untuk argumen pertama dan makna argumen kedua dan ketiga tergantung pada argumen pertama. Semua konstanta yang diperlukan tersedia disqlite3modul.

LewatNonesebagaipemberi kuasa_panggilan_balikakan menonaktifkan pemberi otorisasi.

Diubah dalam versi 3.11: Menambahkan dukungan untuk menonaktifkan pemberi otorisasi menggunakanNone.

mengatur_penanganan_kemajuan(penangan_kemajuanN)

Daftardapat dipanggil penangan_kemajuanuntuk dipanggil untuk setiapNinstruksi dari mesin virtual SQLite. Ini berguna jika Anda ingin dipanggil dari SQLite selama operasi yang berjalan lama, misalnya untuk memperbarui GUI.

Jika Anda ingin menghapus pengendali kemajuan yang telah diinstal sebelumnya, panggil metode denganNoneuntukpenangan_kemajuan.

Mengembalikan nilai bukan nol dari fungsi pengendali akan menghentikan kueri yang sedang dijalankan dan menyebabkannya memunculkanKesalahan Basis Datapengecualian.

set_jejak_panggilan_balik(jejak_panggilan_balik)

Daftardapat dipanggil jejak_panggilan_balikyang akan dipanggil untuk setiap pernyataan SQL yang benar-benar dieksekusi oleh backend SQLite.

Satu-satunya argumen yang dilewatkan ke panggilan balik adalah pernyataan (sepertikuat) yang sedang dieksekusi. Nilai pengembalian dari panggilan balik diabaikan. Perhatikan bahwa backend tidak hanya menjalankan pernyataan yang diteruskan keKursor.eksekusi()metode. Sumber lain termasukpengelolaan transaksidarisqlite3modul dan eksekusi pemicu yang ditetapkan dalam database saat ini.

LewatNonesebagaijejak_panggilan_balikakan menonaktifkan panggilan balik jejak.

Catatan

Pengecualian yang dimunculkan dalam panggilan balik jejak tidak disebarkan. Sebagai bantuan pengembangan dan debugging, gunakanaktifkan_callback_tracebacks()untuk mengaktifkan pencetakan traceback dari pengecualian yang dimunculkan dalam pemanggilan jejak.

Ditambahkan dalam versi 3.3.

aktifkan_muat_ekstensi(diaktifkan/)

Aktifkan mesin SQLite untuk memuat ekstensi SQLite dari pustaka bersama jikadiaktifkanadalahTrue; jika tidak, larang pemuatan ekstensi SQLite. Ekstensi SQLite dapat menentukan fungsi baru, agregat, atau implementasi tabel virtual yang sama sekali baru. Salah satu ekstensi yang terkenal adalah ekstensi pencarian teks lengkap yang didistribusikan dengan SQLite.

Catatan

Itusqlite3modul tidak dibangun dengan dukungan ekstensi yang dapat dimuat secara default, karena beberapa platform (terutama macOS) memiliki pustaka SQLite yang dikompilasi tanpa fitur ini. Untuk mendapatkan dukungan ekstensi yang dapat dimuat, Anda harus melewati--aktifkan-ekstensi-sqlite-yang-dapat-dimuatpilihan untukkonfigurasikan.

Menaikkanacara audit sqlite3.enable_load_extensiondengan argumenconnectionenabled.

Ditambahkan dalam versi 3.2.

Diubah dalam versi 3.10: Menambahkansqlite3.enable_load_extensionacara audit.

con.enable_load_extension(True)

# Load the fulltext search extension
con.execute("select load_extension('./fts3.so')")

# alternatively you can load the extension using an API call:
# con.load_extension("./fts3.so")

# disable extension loading again
con.enable_load_extension(False)

# example from SQLite wiki
con.execute("CREATE VIRTUAL TABLE recipe USING fts3(name, ingredients)")
con.executescript("""
    INSERT INTO recipe (name, ingredients) VALUES('broccoli stew', 'broccoli peppers cheese tomatoes');
    INSERT INTO recipe (name, ingredients) VALUES('pumpkin stew', 'pumpkin onions garlic celery');
    INSERT INTO recipe (name, ingredients) VALUES('broccoli pie', 'broccoli cheese onions flour');
    INSERT INTO recipe (name, ingredients) VALUES('pumpkin pie', 'pumpkin sugar flour butter');
    """)
for row in con.execute("SELECT rowid, name, ingredients FROM recipe WHERE name MATCH 'pie'"):
    print(row)

beban_ekstensi(jalur/*titik masuk=Tidak ada)

Muat ekstensi SQLite dari pustaka bersama. Aktifkan pemuatan ekstensi denganaktifkan_muat_ekstensi()sebelum memanggil metode ini.

Parameternya:

  • jalur (kuat) – Jalur ke ekstensi SQLite.

  • titik masuk (kuat | Tidak ada) – Nama titik masuk. JikaNone(default), SQLite akan memberikan nama titik masuknya sendiri; lihat dokumen SQLiteMemuat Ekstensiuntuk rinciannya.

Menaikkanacara audit sqlite3.load_extensiondengan argumenconnectionpath.

Ditambahkan dalam versi 3.2.

Diubah dalam versi 3.10: Menambahkansqlite3.load_extensionacara audit.

Diubah dalam versi 3.12: Menambahkantitik masukparameter.

iterdump()

Kembalikanpengulanganuntuk membuang database sebagai kode sumber SQL. Berguna saat menyimpan database dalam memori untuk pemulihan nanti. Mirip dengan.dumpperintah diBahasa Inggris sqlite3kerang.

Contoh:

# Convert file example.db to SQL dump file dump.sql
con = sqlite3.connect('example.db')
with open('dump.sql', 'w') as f:
    for line in con.iterdump():
        f.write('%sn' % line)
con.close()

Lihat juga

Cara menangani penyandian teks non-UTF-8

cadangan(target*halaman = -1kemajuan=Tidak adanama='utama'tidur = 0,250)

Buat cadangan basis data SQLite.

Berfungsi bahkan jika basis data sedang diakses oleh klien lain atau secara bersamaan melalui koneksi yang sama.

Parameternya:

  • target (Koneksi) – Koneksi basis data untuk menyimpan cadangan.

  • halaman (ke dalam) – Jumlah halaman yang akan disalin pada satu waktu. Jika sama dengan atau kurang dari0, seluruh database disalin dalam satu langkah. Defaultnya adalah-1.

  • kemajuan (panggilan balik| None) – Jika diatur kedapat dipanggil, itu dipanggil dengan tiga argumen integer untuk setiap iterasi cadangan:statusdari iterasi terakhir,tersisajumlah halaman yang masih harus disalin, dantotaljumlah halaman. Defaultnya adalahNone.

  • nama (kuat) – Nama database yang akan dicadangkan."main"(default) untuk database utama,"temp"untuk database sementara, atau nama database kustom seperti yang dilampirkan menggunakanATTACH DATABASEPernyataan SQL.

  • tidur (mengambang) – Jumlah detik untuk tidur di antara upaya berturut-turut untuk mencadangkan halaman yang tersisa.

Contoh 1, menyalin database yang ada ke database lain:

def progress(status, remaining, total):
    print(f'Copied {total-remaining} of {total} pages...')

src = sqlite3.connect('example.db')
dst = sqlite3.connect('backup.db')
with dst:
    src.backup(dst, pages=1, progress=progress)
dst.close()
src.close()

Contoh 2, menyalin database yang ada ke salinan sementara:

src = sqlite3.connect('example.db')
dst = sqlite3.connect(':memory:')
src.backup(dst)
dst.close()
src.close()

Ditambahkan dalam versi 3.7.

Lihat juga

Cara menangani penyandian teks non-UTF-8

dapatkan batas(kategori/)

Dapatkan batas waktu koneksi.

Parameternya:

kategori (ke dalam) – ItuKategori batas SQLiteuntuk ditanyakan.

Tipe pengembalian:

ke dalam

Menaikkan:

Kesalahan Pemrograman- Jikakategoritidak dikenali oleh pustaka SQLite yang mendasarinya.

Contoh, menanyakan panjang maksimum pernyataan SQL untukKoneksi con(nilai defaultnya adalah 1000000000):

>>>

>>> con.getlimit(sqlite3.SQLITE_LIMIT_SQL_LENGTH)
1000000000

Ditambahkan dalam versi 3.11.

mengatur batas(kategorimembatasi/)

Tetapkan batas waktu koneksi. Upaya untuk meningkatkan batas di atas batas atas yang ditetapkan akan dipotong secara diam-diam hingga batas atas yang ditetapkan. Terlepas dari apakah batas diubah atau tidak, nilai batas sebelumnya akan dikembalikan.

Parameternya:

Tipe pengembalian:

ke dalam

Menaikkan:

Kesalahan Pemrograman- Jikakategoritidak dikenali oleh pustaka SQLite yang mendasarinya.

Contohnya, batasi jumlah database yang terlampir menjadi 1 untukKoneksi con(batas default adalah 10):

>>>

>>> con.setlimit(sqlite3.SQLITE_LIMIT_ATTACHED, 1)
10
>>> con.getlimit(sqlite3.SQLITE_LIMIT_ATTACHED)
1

Ditambahkan dalam versi 3.11.

dapatkan konfigurasi(di/)

Menanyakan opsi konfigurasi koneksi boolean.

Parameternya:

di (ke dalam) - AKode SQLITE_DBCONFIG.

Tipe pengembalian:

bool

Ditambahkan dalam versi 3.12.

mengatur konfigurasi(diaktifkan=Benar/)

Tetapkan opsi konfigurasi koneksi boolean.

Parameternya:

Ditambahkan dalam versi 3.12.

serialisasi(*nama='utama')

Serialisasikan database ke dalambyte dalam bahasa inggrisobjek. Untuk file basis data pada disk biasa, serialisasi hanyalah salinan dari file disk. Untuk basis data dalam memori atau basis data "temp", serialisasi adalah urutan byte yang sama yang akan ditulis ke disk jika basis data tersebut dicadangkan ke disk.

Parameternya:

nama (kuat) – Nama database yang akan diserialisasi. Defaultnya adalah"main".

Tipe pengembalian:

byte dalam bahasa inggris

Catatan

Metode ini hanya tersedia jika pustaka SQLite yang mendasarinya memiliki API serialisasi.

Ditambahkan dalam versi 3.11.

deserialisasi(data/*nama='utama')

Deserialisasikandiserialkandatabase ke dalamKoneksiMetode ini menyebabkan koneksi database terputus dari databasenama, dan buka kembalinamasebagai database dalam memori berdasarkan serialisasi yang terkandung dalamdata.

Parameternya:

Menaikkan:

Catatan

Metode ini hanya tersedia jika pustaka SQLite yang mendasarinya memiliki API deserialize.

Ditambahkan dalam versi 3.11.

komit otomatis

Atribut ini mengontrolPEP 249-perilaku transaksi yang patuh.autocommitmemiliki tiga nilai yang diizinkan:

MengubahautocommitkeFalseakan membuka transaksi baru, dan mengubahnya menjadiTrueakan melakukan setiap transaksi yang tertunda.

MelihatKontrol transaksi melalui atribut autocommituntuk lebih jelasnya.

Catatan

Itutingkat_isolasiatribut tidak memiliki efek kecualikomit otomatisadalahKONTROL_TRANSAKSI_LEGACY.

Ditambahkan dalam versi 3.12.

dalam_transaksi

Atribut hanya-baca ini sesuai dengan SQLite tingkat rendahmode komit otomatis.

Truejika transaksi aktif (ada perubahan yang belum dikomit),Falsejika tidak.

Ditambahkan dalam versi 3.2.

tingkat_isolasi

Mengontrolmode penanganan transaksi lamadarisqlite3Jika diatur keNone, transaksi tidak pernah dibuka secara implisit. Jika diatur ke salah satu"DEFERRED""IMMEDIATE", atau"EXCLUSIVE", sesuai dengan yang mendasarinyaPerilaku transaksi SQLitemanajemen transaksi implisitdilakukan.

Jika tidak ditimpa olehtingkat_isolasiparameter dariMenghubung(), defaultnya adalah"", yang merupakan alias untuk"DEFERRED".

Catatan

Menggunakankomit otomatisuntuk mengontrol penanganan transaksi disarankan menggunakanisolation_levelisolation_leveltidak ada efeknya kecualikomit otomatisdiatur untukKONTROL_TRANSAKSI_LEGACY(bawaan).

pabrik_baris

Inisialpabrik_barisuntukKursorobjek yang dibuat dari koneksi ini. Menetapkan atribut ini tidak memengaruhirow_factorydari kursor yang ada milik koneksi ini, hanya yang baru. ApakahNonesecara default, artinya setiap baris dikembalikan sebagaitupel.

MelihatCara membuat dan menggunakan pabrik barisuntuk lebih jelasnya.

pabrik_teks

Adapat dipanggilyang menerimabyte dalam bahasa inggrisparameter dan mengembalikan representasi teksnya. Callable dipanggil untuk nilai SQLite denganTEXTtipe data. Secara default, atribut ini diatur kekuat.

MelihatCara menangani penyandian teks non-UTF-8untuk lebih jelasnya.

total_perubahan

Mengembalikan jumlah total baris basis data yang telah dimodifikasi, dimasukkan, atau dihapus sejak koneksi basis data dibuka.

Objek kursor

ACursorObjek mewakili suatukursor basis datayang digunakan untuk mengeksekusi pernyataan SQL, dan mengelola konteks operasi pengambilan. Kursor dibuat menggunakanKoneksi.kursor(), atau dengan menggunakan salah satumetode pintasan koneksi.

Objek kursor adalahiterator (pengulangan), artinya jika Andamenjalankan()ASELECTkueri, Anda cukup mengulangi kursor untuk mengambil baris hasil:

for row in cur.execute("SELECT t FROM data"):
    print(row)

kelassqlite3. Kursor

AKursorinstance memiliki atribut dan metode berikut.

menjalankan(bahasa inggrisparameter=()/)

Jalankan pernyataan SQL tunggal, secara opsional mengikat nilai Python menggunakantempat penampung.

Parameternya:

Menaikkan:

Kesalahan Pemrograman- Jikabahasa inggrisberisi lebih dari satu pernyataan SQL.

Jikakomit otomatisadalahKONTROL_TRANSAKSI_LEGACYtingkat_isolasitidakNonebahasa inggrisadalahINSERTUPDATEDELETE, atauREPLACEpernyataan, dan tidak ada transaksi terbuka, transaksi dibuka secara implisit sebelum dieksekusibahasa inggris.

Tidak berlaku lagi sejak versi 3.12, akan dihapus di versi 3.14:Peringatan Penghentian Penggunaandipancarkan jikatempat penampung bernamadigunakan danParameteradalah urutan bukan urutankamusDimulai dengan Python 3.14,Kesalahan Pemrogramanakan dinaikkan sebagai gantinya.

Menggunakaneksekusi skrip()untuk mengeksekusi beberapa pernyataan SQL.

mengeksekusibanyak(bahasa inggrisParameter/)

Untuk setiap item diParameter, jalankan berulang kalidiparameterisasiPernyataan SQL DMLbahasa inggris.

Menggunakan penanganan transaksi implisit yang sama sepertimenjalankan().

Parameternya:

Menaikkan:

Kesalahan Pemrograman- Jikabahasa inggrisberisi lebih dari satu pernyataan SQL, atau bukan pernyataan DML.

Contoh:

rows = [
    ("row1",),
    ("row2",),
]
# cur is an sqlite3.Cursor object
cur.executemany("INSERT INTO data VALUES(?)", rows)

Catatan

Semua baris yang dihasilkan dibuang, termasuk pernyataan DML denganKlausa PENGEMBALIAN.

Tidak berlaku lagi sejak versi 3.12, akan dihapus di versi 3.14:Peringatan Penghentian Penggunaandipancarkan jikatempat penampung bernamadigunakan dan barang-barang diParameteradalah urutan bukankamusDimulai dengan Python 3.14,Kesalahan Pemrogramanakan dinaikkan sebagai gantinya.

eksekusi skrip(skrip sql/)

Jalankan pernyataan SQL diskrip sqlJikakomit otomatisadalahKONTROL_TRANSAKSI_LEGACYdan ada transaksi yang tertunda, implisitCOMMITpernyataan dieksekusi terlebih dahulu. Tidak ada kontrol transaksi implisit lain yang dilakukan; kontrol transaksi apa pun harus ditambahkan keskrip sql.

skrip sqlharus menjadirangkaian.

Contoh:

# cur is an sqlite3.Cursor object
cur.executescript("""
    BEGIN;
    CREATE TABLE person(firstname, lastname, age);
    CREATE TABLE book(title, author, published);
    CREATE TABLE publisher(name, address);
    COMMIT;
""")

ambil satu()

Jikapabrik_barisadalahNone, kembalikan set hasil kueri baris berikutnya sebagaitupel. Jika tidak, berikan ke pabrik baris dan kembalikan hasilnya. KembaliNonejika tidak ada lagi data yang tersedia.

ambilbanyak(ukuran=ukuran kursor.array)

Mengembalikan set baris berikutnya dari hasil kueri sebagaidaftar. Kembalikan daftar kosong jika tidak ada lagi baris yang tersedia.

Jumlah baris yang akan diambil per panggilan ditentukan olehukuranjikaukurantidak diberikan,ukuran arraymenentukan jumlah baris yang akan diambil. Jika kurang dariukuranbaris tersedia, sebanyak baris yang tersedia akan dikembalikan.

Perhatikan bahwa ada pertimbangan kinerja yang terlibat denganukuranparameter. Untuk kinerja optimal, biasanya lebih baik menggunakan atribut arraysize. Jikaukuranparameter digunakan, maka yang terbaik adalah mempertahankan nilai yang sama dari satuambilbanyak()panggilan ke berikutnya.

ambil semua()

Mengembalikan semua baris (yang tersisa) dari hasil kueri sebagaidaftar. Kembalikan daftar kosong jika tidak ada baris yang tersedia. Perhatikan bahwaukuran arrayatribut dapat memengaruhi kinerja operasi ini.

menutup()

Tutup kursor sekarang (bukan kapan pun)__del__disebut).

Kursor tidak akan dapat digunakan lagi mulai saat ini;Kesalahan PemrogramanPengecualian akan dimunculkan jika ada operasi yang dicoba dengan kursor.

mengatur ukuran masukan(Ukuran/)

Diperlukan oleh DB-API. Tidak melakukan apa pun disqlite3.

setel ukuran keluaran(ukurankolom=Tidak ada/)

Diperlukan oleh DB-API. Tidak melakukan apa pun disqlite3.

ukuran array

Atribut baca/tulis yang mengontrol jumlah baris yang dikembalikan olehambilbanyak()Nilai default adalah 1 yang berarti satu baris akan diambil per panggilan.

koneksi

Atribut hanya baca yang menyediakan database SQLiteKoneksimilik kursor. AKursorobjek yang dibuat dengan memanggilcon.kursor()akan memilikikoneksiatribut yang mengacu padamenipu:

>>>

>>> con = sqlite3.connect(":memory:")
>>> cur = con.cursor()
>>> cur.connection == con
True
>>> con.close()

keterangan

Atribut hanya-baca yang menyediakan nama kolom dari kueri terakhir. Agar tetap kompatibel dengan API DB Python, atribut ini mengembalikan 7-tuple untuk setiap kolom di mana enam item terakhir dari setiap tuple adalahNone.

Ini sudah diatur untukSELECTpernyataan tanpa baris yang cocok juga.

baris terakhir

Atribut hanya-baca yang menyediakan id baris dari baris terakhir yang dimasukkan. Atribut ini hanya diperbarui setelah berhasilINSERTatauREPLACEpernyataan menggunakanmenjalankan()metode. Untuk pernyataan lainnya, setelahmengeksekusibanyak()ataueksekusi skrip(), atau jika penyisipan gagal, nilailastrowidtidak berubah. Nilai awallastrowidadalahNone.

Catatan

Sisipan ke dalamWITHOUT ROWIDtabel tidak direkam.

Diubah dalam versi 3.6: Menambahkan dukungan untukREPLACEpenyataan.

jumlah baris

Atribut hanya baca yang menyediakan jumlah baris yang dimodifikasi untukINSERTUPDATEDELETE, DanREPLACEpernyataan; adalah-1untuk pernyataan lain, termasuk kueri CTE. Pernyataan ini hanya diperbarui olehmenjalankan()Danmengeksekusibanyak()metode, setelah pernyataan dijalankan hingga selesai. Ini berarti bahwa setiap baris yang dihasilkan harus diambil agarrowcountuntuk diperbarui.

pabrik_baris

Kontrol bagaimana baris diambil dari iniCursordirepresentasikan. JikaNone, baris direpresentasikan sebagaitupelDapat diatur ke yang disertakansqlite3.Baris; ataudapat dipanggilyang menerima dua argumen, aKursorobjek dantuplenilai baris, dan mengembalikan objek kustom yang mewakili baris SQLite.

Default ke apaKoneksi.row_factoryditetapkan pada saatCursortelah dibuat. Menetapkan atribut ini tidak mempengaruhiKoneksi.row_factorykoneksi induk.

MelihatCara membuat dan menggunakan pabrik barisuntuk lebih jelasnya.

Objek baris

kelassqlite3.Baris

ARowinstance berfungsi sebagai sangat dioptimalkanpabrik_barisuntukKoneksiobjek. Mendukung iterasi, pengujian kesetaraan,panjang(), Danpemetaanakses berdasarkan nama kolom dan indeks.

DuaRowObjek akan dianggap sama jika memiliki nama kolom dan nilai yang identik.

MelihatCara membuat dan menggunakan pabrik barisuntuk lebih jelasnya.

kunci()

Kembalikandaftarnama kolom sebagaisenar. Segera setelah query, itu adalah anggota pertama dari setiap tuple diDeskripsi kursor.

Diubah dalam versi 3.5: Menambahkan dukungan pemotongan.

Objek gumpalan

kelassqlite3.Blob

Ditambahkan dalam versi 3.11.

AGumpalcontohnya adalahobjek seperti berkasyang dapat membaca dan menulis data dalam BLOB SQLite. Panggillen(gumpalan)untuk mendapatkan ukuran (jumlah byte) blob. Gunakan indeks danirisanuntuk akses langsung ke data blob.

MenggunakanGumpalsebagaimanajer konteksuntuk memastikan pegangan gumpalan tertutup setelah digunakan.

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE test(blob_col blob)")
con.execute("INSERT INTO test(blob_col) VALUES(zeroblob(13))")

# Write to our blob, using two write operations:
with con.blobopen("test", "blob_col", 1) as blob:
    blob.write(b"hello, ")
    blob.write(b"world.")
    # Modify the first and last bytes of our blob
    blob[0] = ord("H")
    blob[-1] = ord("!")

# Read the contents of our blob
with con.blobopen("test", "blob_col", 1) as blob:
    greeting = blob.read()

print(greeting)  # outputs "b'Hello, world!'"
con.close()

menutup()

Tutup gumpalan itu.

Blob tersebut tidak akan dapat digunakan lagi mulai saat ini.KesalahanPengecualian (atau subkelas) akan dimunculkan jika operasi lebih lanjut dicoba pada blob.

membaca(panjang = -1/)

Membacapanjangbyte data dari blob pada posisi offset saat ini. Jika akhir blob tercapai, data hingga EOF akan dikembalikan. Ketikapanjangtidak ditentukan, atau negatif,membaca()akan membaca sampai akhir blob.

menulis(data/)

Menulisdatake blob pada offset saat ini. Fungsi ini tidak dapat mengubah panjang blob. Menulis di luar akhir blob akan menimbulkanKesalahan Nilai.

memberi tahu()

Kembalikan posisi akses blob saat ini.

mencari(mengimbangiasal=os.SEEK_SET/)

Tetapkan posisi akses blob saat ini kemengimbangi. Ituasalargumen defaultnya adalahos.MENCARI_SET(posisi blob absolut). Nilai lain untukasaladalahos.MENCARI_CUR(mencari relatif terhadap posisi saat ini) danos.CARI_AKHIR(mencari relatif terhadap ujung gumpalan).

Objek PrepareProtocol

kelassqlite3.SiapkanProtokol

Tujuan tunggal tipe PrepareProtocol adalah untuk bertindak sebagaiPEP 246protokol adaptasi gaya untuk objek yang dapatmenyesuaikan diriketipe SQLite asli.

Pengecualian

Hirarki pengecualian didefinisikan oleh DB-API 2.0 (PEP 249).

pengecualiansqlite3.Peringatan

Pengecualian ini saat ini tidak diajukan olehsqlite3modul, tetapi dapat diangkat oleh aplikasi yang menggunakansqlite3, misalnya jika fungsi yang ditentukan pengguna memotong data saat memasukkan.Warningadalah subkelas dariPengecualian.

pengecualiansqlite3.Kesalahan

Kelas dasar pengecualian lain dalam modul ini. Gunakan ini untuk menangkap semua kesalahan dengan satukecualipenyataan.Erroradalah subkelas dariPengecualian.

Jika pengecualian berasal dari dalam pustaka SQLite, dua atribut berikut ditambahkan ke pengecualian:

kode kesalahan sqlite

Kode kesalahan numerik dariAPI SQLite

Ditambahkan dalam versi 3.11.

nama_kesalahan_sqlite

Nama simbolis kode kesalahan numerik dariAPI SQLite

Ditambahkan dalam versi 3.11.

pengecualiansqlite3.KesalahanAntarmuka

Pengecualian dimunculkan karena penyalahgunaan API SQLite C tingkat rendah. Dengan kata lain, jika pengecualian ini dimunculkan, kemungkinan besar hal ini mengindikasikan adanya bug disqlite3modul.InterfaceErroradalah subkelas dariKesalahan.

pengecualiansqlite3.KesalahanDatabase

Pengecualian dimunculkan untuk kesalahan yang terkait dengan basis data. Ini berfungsi sebagai pengecualian dasar untuk beberapa jenis kesalahan basis data. Pengecualian hanya dimunculkan secara implisit melalui subkelas khusus.DatabaseErroradalah subkelas dariKesalahan.

pengecualiansqlite3.KesalahanData

Pengecualian diajukan untuk kesalahan yang disebabkan oleh masalah pada data yang diproses, seperti nilai numerik yang berada di luar rentang, dan string yang terlalu panjang.DataErroradalah subkelas dariKesalahan Basis Data.

pengecualiansqlite3.KesalahanOperasional

Pengecualian diajukan untuk kesalahan yang terkait dengan operasi basis data, dan tidak selalu berada di bawah kendali programmer. Misalnya, jalur basis data tidak ditemukan, atau transaksi tidak dapat diproses.OperationalErroradalah subkelas dariKesalahan Basis Data.

pengecualiansqlite3.Kesalahan Integritas

Pengecualian muncul ketika integritas relasional dari database terpengaruh, misalnya pemeriksaan kunci asing gagal. Ini adalah subkelas dariKesalahan Basis Data.

pengecualiansqlite3.KesalahanInternal

Pengecualian muncul saat SQLite mengalami kesalahan internal. Jika muncul, hal ini dapat mengindikasikan bahwa ada masalah dengan pustaka SQLite saat dijalankan.InternalErroradalah subkelas dariKesalahan Basis Data.

pengecualiansqlite3.KesalahanPemrograman

Pengecualian diajukan untuksqlite3Kesalahan pemrograman API, misalnya memasok jumlah pengikatan yang salah ke kueri, atau mencoba mengoperasikannya pada server tertutup.KoneksiProgrammingErroradalah subkelas dariKesalahan Basis Data.

pengecualiansqlite3.KesalahanTidakDidukung

Pengecualian muncul jika suatu metode atau API basis data tidak didukung oleh pustaka SQLite yang mendasarinya. Misalnya, pengaturandeterministikkeTruedi dalammembuat_fungsi(), jika pustaka SQLite yang mendasarinya tidak mendukung fungsi deterministik.NotSupportedErroradalah subkelas dariKesalahan Basis Data.

Jenis SQLite dan Python

SQLite secara asli mendukung tipe berikut:NULLINTEGERREALTEXTBLOB.

Tipe Python berikut dapat dikirim ke SQLite tanpa masalah:

Tipe Python

Tipe SQLite

None

NULL

ke dalam

INTEGER

mengambang

REAL

kuat

TEXT

byte dalam bahasa inggris

BLOB

Berikut ini adalah cara tipe SQLite diubah menjadi tipe Python secara default:

Tipe SQLite

Tipe Python

NULL

None

INTEGER

ke dalam

REAL

mengambang

TEXT

tergantung padapabrik_tekskuatsecara default

BLOB

byte dalam bahasa inggris

Sistem tipe darisqlite3modul dapat diperluas dengan dua cara: Anda dapat menyimpan tipe Python tambahan dalam database SQLite melaluiadaptor objek, dan Anda bisa membiarkansqlite3modul mengonversi tipe SQLite ke tipe Python melaluikonverter.

Adaptor dan konverter default (tidak digunakan lagi)

Catatan

Adaptor dan konverter default tidak digunakan lagi sejak Python 3.12. Sebagai gantinya, gunakanResep adaptor dan konverterdan menyesuaikannya dengan kebutuhan Anda.

Adaptor dan konverter bawaan yang sudah tidak digunakan lagi terdiri dari:

Catatan

Konverter “stempel waktu” default mengabaikan offset UTC dalam database dan selalu mengembalikan nilai yang naiftanggalwaktu.tanggalwaktuobjek. Untuk mempertahankan offset UTC dalam stempel waktu, biarkan konverter dinonaktifkan, atau daftarkan konverter yang mengetahui offset denganregister_konverter().

Tidak berlaku lagi sejak versi 3.12.

Antarmuka baris perintah

Itusqlite3modul dapat dipanggil sebagai skrip, menggunakan interpreter-Mswitch, untuk menyediakan shell SQLite yang sederhana. Tanda tangan argumennya adalah sebagai berikut:

python -m sqlite3 [-h] [-v] [filename] [sql]

Jenis.quitatau CTRL-D untuk keluar dari shell.

-h, --bantuan

Cetak bantuan CLI.

-v, --versi

Cetak versi pustaka SQLite yang mendasarinya.

Ditambahkan dalam versi 3.12.

Panduan cara melakukan sesuatu

Cara menggunakan placeholder untuk mengikat nilai dalam kueri SQL

Operasi SQL biasanya perlu menggunakan nilai dari variabel Python. Namun, berhati-hatilah saat menggunakan operasi string Python untuk menyusun kueri, karena rentan terhadapSerangan injeksi SQLMisalnya, penyerang dapat menutup tanda kutip tunggal dan menyuntikkanOR TRUEuntuk memilih semua baris:

>>>

>>> # Never do this -- insecure!
>>> symbol = input()
' OR TRUE; --
>>> sql = "SELECT * FROM stocks WHERE symbol = '%s'" % symbol
>>> print(sql)
SELECT * FROM stocks WHERE symbol = '' OR TRUE; --'
>>> cur.execute(sql)

Sebagai gantinya, gunakan substitusi parameter DB-API. Untuk memasukkan variabel ke dalam string kueri, gunakan placeholder di string tersebut, dan gantikan nilai sebenarnya ke dalam kueri dengan menyediakannya sebagaitupelnilai ke argumen kedua kursormenjalankan()metode.

Pernyataan SQL dapat menggunakan salah satu dari dua jenis placeholder: tanda tanya (gaya qmark) atau placeholder bernama (gaya bernama). Untuk gaya qmark,Parameterharus menjadiurutanyang panjangnya harus sesuai dengan jumlah placeholder, atauKesalahan Pemrogramandinaikkan. Untuk gaya yang disebutkan,Parameterharus menjadi contoh darikamus(atau subkelas), yang harus berisi kunci untuk semua parameter bernama; item tambahan apa pun diabaikan. Berikut ini contoh kedua gaya tersebut:

con = sqlite3.connect(":memory:")
cur = con.execute("CREATE TABLE lang(name, first_appeared)")

# This is the named style used with executemany():
data = (
    {"name": "C", "year": 1972},
    {"name": "Fortran", "year": 1957},
    {"name": "Python", "year": 1991},
    {"name": "Go", "year": 2009},
)
cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)

# This is the qmark style used in a SELECT query:
params = (1972,)
cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
print(cur.fetchall())
con.close()

Catatan

PEP 249placeholder numerik adalahbukandidukung. Jika digunakan, mereka akan ditafsirkan sebagai placeholder bernama.

Cara mengadaptasi tipe Python khusus ke nilai SQLite

SQLite hanya mendukung sekumpulan tipe data terbatas secara native. Untuk menyimpan tipe Python kustom dalam database SQLite,menyesuaikanmereka ke salah satuTipe Python SQLite secara asli mengerti.

Ada dua cara untuk mengadaptasi objek Python ke tipe SQLite: membiarkan objek Anda beradaptasi sendiri, atau menggunakanadaptor dapat dipanggil. Yang terakhir akan didahulukan daripada yang pertama. Untuk pustaka yang mengekspor tipe kustom, mungkin masuk akal untuk memungkinkan tipe tersebut beradaptasi sendiri. Sebagai pengembang aplikasi, mungkin lebih masuk akal untuk mengambil kendali langsung dengan mendaftarkan fungsi adaptor kustom.

Cara menulis objek yang dapat beradaptasi

Misalkan kita memilikiPointkelas yang mewakili sepasang koordinat,xDany, dalam sistem koordinat Cartesian. Pasangan koordinat akan disimpan sebagai string teks dalam database, menggunakan titik koma untuk memisahkan koordinat. Ini dapat diimplementasikan dengan menambahkan__conform__(self, protocol)metode yang mengembalikan nilai yang disesuaikan. Objek yang diteruskan keprotokolakan bertipeSiapkan Protokol.

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __conform__(self, protocol):
        if protocol is sqlite3.PrepareProtocol:
            return f"{self.x};{self.y}"

con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("SELECT ?", (Point(4.0, -3.2),))
print(cur.fetchone()[0])
con.close()
Cara mendaftarkan adapter callables

Kemungkinan lainnya adalah membuat fungsi yang mengubah objek Python menjadi tipe yang kompatibel dengan SQLite. Fungsi ini kemudian dapat didaftarkan menggunakandaftar_adapter().

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

def adapt_point(point):
    return f"{point.x};{point.y}"

sqlite3.register_adapter(Point, adapt_point)

con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("SELECT ?", (Point(1.0, 2.5),))
print(cur.fetchone()[0])
con.close()

Cara mengonversi nilai SQLite ke tipe Python khusus

Menulis adaptor memungkinkan Anda mengonversidaritipe Python khususkeNilai SQLite. Untuk dapat mengonversidariNilai SQLiteketipe Python khusus, kami menggunakankonverter.

Ayo kembali kePointkelas. Kami menyimpan koordinat x dan y yang dipisahkan dengan titik koma sebagai string dalam SQLite.

Pertama, kita akan mendefinisikan fungsi konverter yang menerima string sebagai parameter dan membangunPointobjek darinya.

Catatan

Fungsi konverter adalahselalumelewatibyte dalam bahasa inggrisobjek, apa pun tipe data SQLite yang mendasarinya.

def convert_point(s):
    x, y = map(float, s.split(b";"))
    return Point(x, y)

Sekarang kita perlu memberi tahusqlite3saat harus mengonversi nilai SQLite tertentu. Ini dilakukan saat menghubungkan ke database, menggunakanmendeteksi_jenisparameter dariMenghubung()Ada tiga pilihan:

  • Tersirat: mengaturmendeteksi_jeniskePARSE_DECLTYPES

  • Eksplisit: mengaturmendeteksi_jeniskePARSE_NAMA_KOLOM

  • Keduanya: mengaturmendeteksi_jeniskesqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMESNama kolom memiliki prioritas dibanding tipe yang dideklarasikan.

Contoh berikut menggambarkan pendekatan implisit dan eksplisit:

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"

def adapt_point(point):
    return f"{point.x};{point.y}"

def convert_point(s):
    x, y = list(map(float, s.split(b";")))
    return Point(x, y)

# Register the adapter and converter
sqlite3.register_adapter(Point, adapt_point)
sqlite3.register_converter("point", convert_point)

# 1) Parse using declared types
p = Point(4.0, -3.2)
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.execute("CREATE TABLE test(p point)")

cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
cur.execute("SELECT p FROM test")
print("with declared types:", cur.fetchone()[0])
cur.close()
con.close()

# 2) Parse using column names
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
cur = con.execute("CREATE TABLE test(p)")

cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
cur.execute('SELECT p AS "p [point]" FROM test')
print("with column names:", cur.fetchone()[0])
cur.close()
con.close()

Resep adaptor dan konverter

Bagian ini menunjukkan resep untuk adaptor dan konverter umum.

import datetime
import sqlite3

def adapt_date_iso(val):
    """Adapt datetime.date to ISO 8601 date."""
    return val.isoformat()

def adapt_datetime_iso(val):
    """Adapt datetime.datetime to timezone-naive ISO 8601 date."""
    return val.isoformat()

def adapt_datetime_epoch(val):
    """Adapt datetime.datetime to Unix timestamp."""
    return int(val.timestamp())

sqlite3.register_adapter(datetime.date, adapt_date_iso)
sqlite3.register_adapter(datetime.datetime, adapt_datetime_iso)
sqlite3.register_adapter(datetime.datetime, adapt_datetime_epoch)

def convert_date(val):
    """Convert ISO 8601 date to datetime.date object."""
    return datetime.date.fromisoformat(val.decode())

def convert_datetime(val):
    """Convert ISO 8601 datetime to datetime.datetime object."""
    return datetime.datetime.fromisoformat(val.decode())

def convert_timestamp(val):
    """Convert Unix epoch timestamp to datetime.datetime object."""
    return datetime.datetime.fromtimestamp(int(val))

sqlite3.register_converter("date", convert_date)
sqlite3.register_converter("datetime", convert_datetime)
sqlite3.register_converter("timestamp", convert_timestamp)

Cara menggunakan metode pintasan koneksi

Menggunakanmenjalankan()mengeksekusibanyak(), Daneksekusi skrip()metode dariKoneksikelas, kode Anda dapat ditulis lebih ringkas karena Anda tidak perlu membuat (seringkali berlebihan)Kursorobjek secara eksplisit. Sebaliknya,KursorObjek dibuat secara implisit dan metode pintasan ini mengembalikan objek kursor. Dengan cara ini, Anda dapat menjalankanSELECTpernyataan dan mengulanginya secara langsung hanya dengan menggunakan satu panggilan padaKoneksiobyek.

# Create and fill the table.
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE lang(name, first_appeared)")
data = [
    ("C++", 1985),
    ("Objective-C", 1984),
]
con.executemany("INSERT INTO lang(name, first_appeared) VALUES(?, ?)", data)

# Print the table contents
for row in con.execute("SELECT name, first_appeared FROM lang"):
    print(row)

print("I just deleted", con.execute("DELETE FROM lang").rowcount, "rows")

# close() is not a shortcut method and it's not called automatically;
# the connection object should be closed manually
con.close()

Cara menggunakan manajer konteks koneksi

AKoneksiobjek dapat digunakan sebagai manajer konteks yang secara otomatis melakukan atau membatalkan transaksi terbuka saat meninggalkan badan manajer konteks. Jika badandenganpernyataan selesai tanpa pengecualian, transaksi tersebut dikomit. Jika komit ini gagal, atau jika isi dariwithpernyataan tersebut menimbulkan pengecualian yang tidak tertangkap, transaksi dibatalkan. Jikakomit otomatisadalahFalse, transaksi baru dibuka secara implisit setelah melakukan komitmen atau melakukan pembatalan.

Jika tidak ada transaksi terbuka saat meninggalkan badanwithpernyataan, atau jikakomit otomatisadalahTrue, pengelola konteks tidak melakukan apa pun.

Catatan

Pengelola konteks tidak secara implisit membuka transaksi baru atau menutup koneksi. Jika Anda memerlukan pengelola konteks penutup, pertimbangkan untuk menggunakankontekslib.penutupan().

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE lang(id INTEGER PRIMARY KEY, name VARCHAR UNIQUE)")

# Successful, con.commit() is called automatically afterwards
with con:
    con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))

# con.rollback() is called after the with block finishes with an exception,
# the exception is still raised and must be caught
try:
    with con:
        con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))
except sqlite3.IntegrityError:
    print("couldn't add Python twice")

# Connection object used as context manager only commits or rollbacks transactions,
# so the connection object should be closed manually
con.close()

Cara bekerja dengan URI SQLite

Beberapa trik URI yang berguna meliputi:

  • Buka database dalam mode baca-saja:

>>>

>>> con = sqlite3.connect("file:tutorial.db?mode=ro", uri=True)
>>> con.execute("CREATE TABLE readonly(data)")
Traceback (most recent call last):
OperationalError: attempt to write a readonly database
  • Jangan membuat file database baru secara implisit jika belum ada; akan menimbulkanKesalahan Operasionaljika tidak dapat membuat file baru:

>>>

>>> con = sqlite3.connect("file:nosuchdb.db?mode=rw", uri=True)
Traceback (most recent call last):
OperationalError: unable to open database file
  • Buat database dalam memori bernama bersama:

db = "file:mem1?mode=memory&cache=shared"
con1 = sqlite3.connect(db, uri=True)
con2 = sqlite3.connect(db, uri=True)
with con1:
    con1.execute("CREATE TABLE shared(data)")
    con1.execute("INSERT INTO shared VALUES(28)")
res = con2.execute("SELECT data FROM shared")
assert res.fetchone() == (28,)

con1.close()
con2.close()

Informasi lebih lanjut tentang fitur ini, termasuk daftar parameter, dapat ditemukan diDokumentasi URI SQLite.

Cara membuat dan menggunakan pabrik baris

Secara default,sqlite3mewakili setiap baris sebagaitupel. Jika sebuahtupletidak sesuai dengan kebutuhan Anda, Anda dapat menggunakansqlite3.Bariskelas atau kebiasaanpabrik_baris.

Ketikarow_factoryada sebagai atribut baik diKursordanKoneksi, disarankan untuk mengaturKoneksi.row_factory, jadi semua kursor yang dibuat dari koneksi akan menggunakan pabrik baris yang sama.

Rowmenyediakan akses bernama yang diindeks dan tidak peka huruf besar/kecil ke kolom, dengan overhead memori minimal dan dampak kinerjatuple. MenggunakanRowsebagai pabrik baris, tetapkan kerow_factoryatribut:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = sqlite3.Row

Kueri sekarang kembaliRowObjek:

>>>

>>> res = con.execute("SELECT 'Earth' AS name, 6378 AS radius")
>>> row = res.fetchone()
>>> row.keys()
['name', 'radius']
>>> row[0]         # Access by index.
'Earth'
>>> row["name"]    # Access by name.
'Earth'
>>> row["RADIUS"]  # Column names are case-insensitive.
6378
>>> con.close()

Catatan

ItuFROMklausa dapat dihilangkan dalamSELECTpernyataan, seperti pada contoh di atas. Dalam kasus seperti itu, SQLite mengembalikan satu baris dengan kolom yang ditentukan oleh ekspresi, misalnya literal, dengan alias yang diberikanexpr AS alias.

Anda dapat membuat kustompabrik_barisyang mengembalikan setiap baris sebagaikamus, dengan nama kolom dipetakan ke nilai:

def dict_factory(cursor, row):
    fields = [column[0] for column in cursor.description]
    return {key: value for key, value in zip(fields, row)}

Dengan menggunakannya, kueri sekarang mengembalikandictsebagai penggantituple:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = dict_factory
>>> for row in con.execute("SELECT 1 AS a, 2 AS b"):
...     print(row)
{'a': 1, 'b': 2}
>>> con.close()

Pabrik baris berikut mengembalikantupel bernama:

from collections import namedtuple

def namedtuple_factory(cursor, row):
    fields = [column[0] for column in cursor.description]
    cls = namedtuple("Row", fields)
    return cls._make(row)

namedtuple_factory()dapat digunakan sebagai berikut:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = namedtuple_factory
>>> cur = con.execute("SELECT 1 AS a, 2 AS b")
>>> row = cur.fetchone()
>>> row
Row(a=1, b=2)
>>> row[0]  # Indexed access.
1
>>> row.b   # Attribute access.
2
>>> con.close()

Dengan beberapa penyesuaian, resep di atas dapat disesuaikan untuk menggunakankelas data, atau kelas kustom lainnya, sebagai gantibernamatuple.

Cara menangani penyandian teks non-UTF-8

Secara default,sqlite3penggunaankuatuntuk mengadaptasi nilai SQLite denganTEXTtipe data. Ini berfungsi dengan baik untuk teks yang dikodekan UTF-8, tetapi mungkin gagal untuk penyandian lain dan UTF-8 yang tidak valid. Anda dapat menggunakanpabrik_teksuntuk menangani kasus seperti itu.

Karena SQLitemengetik fleksibel, tidak jarang kita menjumpai kolom tabel denganTEXTtipe data yang berisi penyandian non-UTF-8, atau bahkan data acak. Untuk mendemonstrasikannya, mari kita asumsikan kita memiliki basis data dengan teks yang disandikan ISO-8859-2 (Latin-2), misalnya tabel entri kamus Ceko-Inggris. Dengan asumsi kita sekarang memilikiKoneksicontohconterhubung ke database ini, kita dapat mendekodekan teks Latin-2 menggunakan inipabrik_teks:

con.text_factory = lambda data: str(data, encoding="latin2")

Untuk data UTF-8 yang tidak valid atau data acak yang disimpan diTEXTkolom tabel, Anda dapat menggunakan teknik berikut, yang dipinjam dariCARA-CARA UNICODE:

con.text_factory = lambda data: str(data, errors="surrogateescape")

Catatan

Itusqlite3API modul tidak mendukung string yang berisi pengganti.

Lihat juga

CARA-CARA UNICODE

Penjelasan

Kontrol transaksi

sqlite3menawarkan beberapa metode untuk mengontrol apakah, kapan dan bagaimana transaksi basis data dibuka dan ditutup.Kontrol transaksi melalui atribut autocommitdirekomendasikan, sementaraKontrol transaksi melalui atribut separation_levelmempertahankan perilaku pra-Python 3.12.

Kontrol transaksi melaluiautocommitatribut

Cara yang disarankan untuk mengendalikan perilaku transaksi adalah melaluiKoneksi.komit otomatisatribut, yang sebaiknya diatur menggunakankomit otomatisparameter dariMenghubung().

Disarankan untuk mengaturkomit otomatiskeFalse, yang menyiratkanPEP 249-kontrol transaksi yang sesuai. Ini berarti:

  • sqlite3memastikan bahwa transaksi selalu terbuka, jadiMenghubung()Koneksi.komit(), DanKoneksi.rollback()secara implisit akan membuka transaksi baru (segera setelah menutup transaksi yang tertunda, untuk dua transaksi terakhir).sqlite3penggunaanBEGIN DEFERREDpernyataan saat membuka transaksi.

  • Transaksi harus dilakukan secara eksplisit menggunakancommit().

  • Transaksi harus dibatalkan secara eksplisit menggunakanrollback().

  • Rollback implisit dilakukan jika databasemenutup()-ed dengan perubahan yang tertunda.

Mengaturkomit otomatiskeTrueuntuk mengaktifkan SQLitemode komit otomatisDalam mode ini,Koneksi.komit()DanKoneksi.rollback()tidak memiliki efek. Perhatikan bahwa mode autocommit SQLite berbeda dariPEP 249-patuhKoneksi.komit otomatisatribut; penggunaanKoneksi.dalam_transaksiuntuk menanyakan mode autocommit SQLite tingkat rendah.

Mengaturkomit otomatiskeKONTROL_TRANSAKSI_LEGACYuntuk menyerahkan perilaku kontrol transaksi kepadaKoneksi.tingkat_isolasiatribut. LihatKontrol transaksi melalui atribut separation_leveluntuk informasi lebih lanjut.

Kontrol transaksi melaluiisolation_levelatribut

Catatan

Cara yang disarankan untuk mengontrol transaksi adalah melaluikomit otomatisatribut. LihatKontrol transaksi melalui atribut autocommit.

JikaKoneksi.komit otomatisdiatur untukKONTROL_TRANSAKSI_LEGACY(default), perilaku transaksi dikontrol menggunakanKoneksi.tingkat_isolasiatribut. Jika tidak,isolation_leveltidak memiliki efek.

Jika atribut koneksitingkat_isolasitidakNone, transaksi baru secara implisit dibuka sebelumnyamenjalankan()Danmengeksekusibanyak()mengeksekusiINSERTUPDATEDELETE, atauREPLACEpernyataan; untuk pernyataan lainnya, tidak ada penanganan transaksi implisit yang dilakukan. Gunakanmelakukan()Dankembalikan()metode untuk masing-masing melakukan dan memutar kembali transaksi yang tertunda. Anda dapat memilih yang mendasarinyaPerilaku transaksi SQLite—yaitu, apakah dan jenis apaBEGINpernyataansqlite3dieksekusi secara implisit – melaluitingkat_isolasiatribut.

Jikatingkat_isolasidiatur untukNone, tidak ada transaksi yang dibuka secara implisit sama sekali. Ini meninggalkan pustaka SQLite yang mendasarinya dimode komit otomatis, tetapi juga memungkinkan pengguna untuk melakukan penanganan transaksi mereka sendiri menggunakan pernyataan SQL eksplisit. Mode autocommit pustaka SQLite yang mendasarinya dapat ditanyakan menggunakandalam_transaksiatribut.

Itueksekusi skrip()metode secara implisit melakukan setiap transaksi yang tertunda sebelum eksekusi skrip SQL yang diberikan, terlepas dari nilaitingkat_isolasi.

Diubah dalam versi 3.6:sqlite3digunakan untuk secara implisit melakukan transaksi terbuka sebelum pernyataan DDL. Hal ini tidak lagi berlaku.

Diubah dalam versi 3.12: Cara yang direkomendasikan untuk mengontrol transaksi sekarang melaluikomit otomatisatribut.