Pengaturcaraan

Menguasai Pangkalan Data SQLite di Python

Menguasai Pangkalan Data SQLite di Python

SQLite adalah sistem pengurusan pangkalan data hubungan berdasarkan bahasa SQL; ia adalah mesin pangkalan data konfigurasi sifar tanpa pelayan. Ini adalah salah satu enjin pangkalan data yang paling popular dan sangat mudah digunakan dalam aplikasi kecil. Ini hanya membuat satu fail disk untuk menyimpan keseluruhan pangkalan data, yang menjadikan fail itu mudah alih. Ia digunakan dalam OS Android sebagai sumber utama untuk menyimpan data. Ia juga digunakan oleh Google Chrome untuk menyimpan data laman web dan data pengguna, termasuk kata laluan di mesin setempat.

Mahir bekerja dengan Pangkalan Data SQLite di Python

Dalam tutorial ini, topik yang akan dibahas adalah: memasukkan gambar dalam jadual SQLite, Menyenaraikan jadual yang ada dalam pangkalan data, Mengenal pasti perubahan total sejak pangkalan data disambungkan, Membuat sandaran pangkalan data, Membuang pangkalan data SQLite, Rollback dalam SQLite, Menghapus rekod dari jadual, Menjatuhkan jadual, dan pengecualian pangkalan data SQLite.

Anda mungkin juga ingin melihat bahagian pertama tutorial ini, yang membentangkan asas SQLite, Kelebihan menggunakannya, Menyambung ke fail pangkalan data, Membuat jadual dalam pangkalan data, Memasukkan data ke dalam jadual, Meminta data dari jadual, mengemas kini jadual dan banyak lagi.

Fail dan gambar dalam pangkalan data SQLite

Semasa bekerja dengan pangkalan data, ada situasi di mana anda perlu memasukkan gambar atau fail ke dalam pangkalan data atau mengeksportnya. Sebagai contoh, Jika anda membuat pangkalan data untuk menyimpan data pekerja, anda mungkin juga perlu memasukkan gambar setiap pekerja dalam pangkalan data.

Untuk menambahkan gambar dalam pangkalan data SQLite, kita perlu menggunakan jenis data BLOB SQLite. Jenis data BLOB () digunakan untuk menyimpan objek besar biasanya fail besar seperti gambar, muzik, video, dokumen, PDF, dll. Langkah pertama adalah menukar data dan gambar menjadi objek byte Python, yang serupa dengan jenis data BLOB SQLite. Sebelum meneruskan, buat jadual bernama pelajar dalam pangkalan data dengan medan id, nama, gambar, tanda. Jalankan kod berikut untuk membuat jadual.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") cetak (" \ n [+] Berhasil disambungkan ke pangkalan data ") cur = conn.kursor () cetak ("\ n [+] Kursor berjaya disiapkan") table = cur.laksanakan ("" "BUAT TABLE pelajar (id INT PRIMARY KEY, name TEXT, images BLOB, marks TEXT);" "") print ("\ n [+] Jadual berjaya dibuat") cur.tutup () samb.komit () samb.tutup ()

Program ini akan membuat jadual baru dengan nama pelajar. Anda akan melihat output berikut di terminal.

Memasukkan Imej

Untuk memasukkan gambar dalam pangkalan data SQLite, ubah gambar dalam objek byte python dan kemudian masukkan ke dalam lajur gambar, yang menerima data BLOB. Jalankan kod berikut untuk menambahkan gambar img.png dalam pangkalan data menggunakan Python.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") samb.text_factory = str print ("\ n [+] Berhasil disambungkan ke pangkalan data") cur = conn.kursor () cetak ("\ n [+] Kursor berjaya disiapkan") dengan terbuka ("img.png "," rb ") sebagai fail: data = fail.baca () python_tuple = (101, "robin", data, "90") print ("\ n [+] Gambar telah berjaya diimport") cetak ("\ n [+] Sekarang memasukkan dalam pangkalan data") cur.laksanakan ("INSERT INTO student (id, nama, gambar, markah) NILAI (?,?,?,?) ", python_tuple) print (" \ n [+] Data telah berjaya disisipkan ") cur.tutup () samb.komit () samb.tutup ()

Program ini akan memasukkan gambar ke dalam pangkalan data pelajar yang anda buat. Anda akan melihat output berikut.

Dalam program di atas, kami telah membuka fail dalam mod binari dan membaca setiap bait dan menyimpannya dalam pemboleh ubah data. Kemudian kami menggunakan pemboleh ubah tersebut dalam pernyataan INSERT untuk memasukkan gambar ke dalam pangkalan data.

Mengambil gambar

Untuk mengambil gambar dari pangkalan data, ambil baris menggunakan pernyataan pilih dan kemudian akses data binari gambar ke dalam pemboleh ubah python, yang akan disimpan dalam fail gambar. Lihat kod berikut untuk ilustrasi.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") samb.text_factory = str print ("\ n [+] Berhasil disambungkan ke pangkalan data") cur = conn.kursor () cetak ("\ n [+] Kursor berjaya disiapkan") cetak ("\ n [+] Mengambil gambar") cur.laksanakan ("PILIH * DARI pelajar") ret = cur.fetchall () untuk i in ret: data = i [2] dengan terbuka ("img2.png "," wb ") sebagai fail: fail.tulis (data) cetak ("\ n [+] Gambar telah disimpan") cur.tutup () samb.komit () samb.tutup ()

Program sederhana ini akan mengambil gambar dari pangkalan data dan menyimpannya dalam cakera bernama img2.png. Anda juga boleh memilih nama lain untuk fail gambar. Output program ditunjukkan di bawah.

Senaraikan semua Jadual Pangkalan Data

Dalam pangkalan data, kita dapat membuat banyak jadual. Oleh itu, terdapat juga keperluan untuk menyenaraikan semua jadual yang terdapat dalam pangkalan data. Untuk menyenaraikan jadual yang terdapat dalam pangkalan data, tanyakan jadual sqlite_master menggunakan pernyataan SELECT SQL. Sintaks pertanyaan adalah:

PILIH nama DARI sqlite_master DI MANA type = "table"

Inilah cara kami menggunakan pertanyaan ini untuk menyenaraikan semua jadual yang ada di pangkalan data kami.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") cetak (" \ n [+] Berhasil disambungkan ke pangkalan data ") cur = conn.kursor () cetak ("\ n [+] Kursor berjaya disiapkan") cur.jalankan ("PILIH nama dari sqlite_master di mana type =" table "") baris = cur.fetchall () print (baris) cur.tutup () samb.komit () samb.tutup ()

Kod di atas akan menyenaraikan semua jadual yang terdapat dalam pangkalan data kami. Output yang dihasilkan oleh kod ketika dijalankan adalah seperti berikut. Anda mungkin melihat beberapa output lain bergantung pada jadual yang telah anda buat di dalam pangkalan data.

Mengenal pasti jumlah perubahan sejak disambungkan ke pangkalan data

Dalam keadaan apa pun, berguna untuk mengenal pasti bilangan baris yang telah diubah, dimasukkan, atau dihapus sejak pangkalan data dihubungkan. Untuk itu, gunakan jumlah_perubahan () kaedah objek sambungan, yang akan mengembalikan jumlah baris pangkalan data yang terjejas sejak sambungan. Mari kita lihat contoh demo untuk mengetahui bagaimana ia berfungsi.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") samb.text_factory = str print ("\ n [+] Berhasil disambungkan ke kedua-dua pangkalan data") cur = conn.kursor () cetak ("\ n [+] Kedua-dua Kursor telah berjaya disiapkan") cur.laksanakan ("MASUKKAN INTO pelajar (id, nama, gambar, markah) NILAI (140, 'David',", 99) ") cur.laksanakan ("MASUKKAN INTO pelajar (id, nama, gambar, markah) NILAI (150, 'Sam',", 97) ") perubahan = kon.Total_changes print ("\ n [+] Jumlah sekarang perubahan baris adalah:", perubahan) samb.komit () cur.tutup () samb.tutup ()

Program di atas akan mencetak bilangan perubahan baris pada sambungan semasa. Anda akan melihat output berikut.

Rollback dalam SQLite

Semasa membatalkan beberapa tugas, anda boleh menggunakan fungsi rollback (). Kaedah ini dapat digunakan untuk mengurungkan tugas yang telah dilakukan setelah melakukan komitmen terakhir. Lihat contoh di bawah untuk gambaran.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") samb.text_factory = str print ("\ n [+] Berhasil disambungkan ke kedua-dua pangkalan data") cur = conn.kursor () cetak ("\ n [+] Kedua-dua Kursor telah berjaya disiapkan") cur.laksanakan ("MASUKKAN INTO pelajar (id, nama, gambar, markah) NILAI (100001, 'David',", 99) ") cur.laksanakan ("MASUKKAN INTO pelajar (id, nama, gambar, markah) NILAI (100002, 'Sam',", 97) ".komit () cetak ("\ n [+] Dua baris berjaya dimasukkan") cur.laksanakan ("PILIH * DARI pelajar") pertama = cur.fetchall () print ("\ n [+] Rekod baru dalam pangkalan data adalah:") untuk i in first: print (i) cur.laksanakan ("MASUKKAN INTO pelajar (id, nama, gambar, markah) NILAI (10003, 'Kishan',", 100) ") cur.laksanakan ("MASUKKAN INTO pelajar (id, nama, gambar, markah) NILAI (10004, 'Ankit',", 100) ") cetak (" \ n [+] Dua baris telah berjaya disisipkan tetapi tidak dilakukan ") samb.rollback () print ("\ n [+] Kami telah mengembalikan perintah sebelumnya sehingga data baru tidak akan dimasukkan").komit () cur.laksanakan ("PILIH * DARI pelajar") kedua = cur.fetchall () print ("\ n [+] Rekod baru dalam pangkalan data adalah:") untuk i in second: print (i) cur.tutup () samb.tutup ()

Dalam contoh di atas, dua penyataan sisipan pertama akan memasukkan data seperti yang diberikan, tetapi dua penyataan sisipan terakhir akan dikembalikan sehingga mereka tidak akan menambahkan data ke dalam jadual. Hasilnya seperti di bawah.

Sandarkan Pangkalan Data

Semasa bekerja dengan pangkalan data, penting untuk mengambil sandaran pangkalan data. Modul sqlite3 menyediakan fungsi untuk mengambil sandaran pangkalan data. Dengan menggunakan kaedah cadangan () objek sambungan, kita dapat membuat sandaran pangkalan data SQLite. Sintaks asas kaedah sandaran adalah:

sandaran (sasaran, *, halaman = 0, kemajuan = Tiada, nama = "utama", tidur = 0.250)

Secara lalai, atau bila halaman sama ada 0 atau bilangan bulat negatif, keseluruhan pangkalan data disalin dalam satu langkah, yang lebih disukai untuk pangkalan data kecil; jika tidak, kaedah ini melakukan penyalinan gelung hingga halaman pada masa yang dapat dilakukan dengan pangkalan data yang luas. The nama Argumen menunjukkan nama pangkalan data yang akan disalin: mesti berupa rentetan yang mengandungi lalai, untuk menunjukkan pangkalan data utama, atau untuk menunjukkan pangkalan data sementara. The tidur argumen menentukan masa dalam beberapa saat untuk tidur antara percubaan untuk membuat sandaran halaman yang tersisa. Ia boleh sama ada sebagai bilangan bulat atau nilai floating-point.

Mari kita ambil sandaran dari pangkalan data.db pangkalan data yang telah kami gunakan dalam tutorial.

import sqlite3 conn_main = sqlite3.sambungkan ("sampel.db ") conn_backup = sqlite3.sambungkan ("sample_backup.db ") cetak (" \ n [+] Berhasil disambungkan ke kedua-dua pangkalan data ") cur_main = conn_main.kursor () cur_backup = conn_backup.kursor () cetak ("\ n [+] Kedua-dua Kursor telah berjaya disiapkan") conn_main.sandaran (conn_backup, pages = 0, progress = None, name = "main") cetak ("Pangkalan data berjaya dibuat sandaran") cur_main.tutup () cur_backup.tutup () conn_main.komit () conn_backup.komit () conn_main.tutup () conn_backup.tutup ()

Dalam kod di atas, dua pangkalan data dihubungkan, satu adalah pangkalan data yang ingin kita buat sandaran, dan yang kedua adalah pangkalan data di mana kita akan mengambil sandaran. Menggunakan sandaran () kaedah objek sambungan pangkalan data pertama untuk membuat sandaran. Fungsi ini menerima objek sambungan dari pangkalan data kedua sebagai sasaran untuk membuat sandaran pada pangkalan data yang lain. Menggunakan halaman = 0 hujah, jadi prosesnya akan berlangsung dalam satu langkah, yang disarankan untuk pangkalan data kecil. Program ini akan membuat contoh nama pangkalan data baru_cadangan.db dan isi dengan sandaran pangkalan data pertama. Anda mungkin melihat pangkalan data baru telah dibuat dalam folder semasa dengan ukuran fail yang sama seperti sebelumnya.

Membuang pangkalan data SQLite

Membuang pangkalan data adalah tugas penting. Biasanya, fail dump adalah sekumpulan pernyataan SQL untuk data, yang biasanya digunakan untuk sandaran. Kita boleh membuang pangkalan data menggunakan kaedah dump (). Lihat contoh di bawah untuk mengetahui cara menjatuhkan pangkalan data SQLite.

import sqlite3 con = sqlite3.sambungkan ("pangkalan data.db ") dengan terbuka ('dump.sql ',' w ') sebagai f: untuk garis dalam kon.iterdump (): f.tulis ('% s \ n'% baris)

Program di atas akan membuang sampel pangkalan data.db, dan ia akan menyimpan data yang dibuang ke dalam fail bernama dump.sql. Anda dapat melihat data yang ada di direktori di mana fail python terkini dan membukanya menggunakan penyunting teks apa pun.

executemany () kaedah SQLite3

The pelaksana () kaedah melaksanakan perintah SQL terhadap semua urutan parameter atau pemetaan yang terdapat dalam urutan seq_of_parameter. Untuk kesederhanaan, kaedah ini dapat digunakan untuk melaksanakan kebanyakan perintah SQL dalam satu baris. E.g., Kita boleh memasukkan sebilangan baris melalui senarai python menggunakan perintah ini. Lihat contoh di bawah untuk ilustrasi.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") cetak (" \ n [+] Berhasil disambungkan ke pangkalan data ") cur = conn.kursor () cetak ("\ n [+] Kursor berjaya disiapkan") python_list = [(10000000, 'vivek', ", '10'), (100000001, 'rose',", '21'), (100000002, 'robin', ", '31'), (100000003, 'Dev',", '4'), (100000004, 'michael', ", '52')] cur.pelaksana ("INSERT INTO student (id, nama, gambar, markah) NILAI (?,?,?,?) ", python_list) print (" \ n [+] Semua Data telah berjaya dimasukkan ") cur.tutup () samb.komit () samb.tutup ()

Program di atas akan memasukkan semua data yang diberikan dalam senarai python. Hasil yang dihasilkan oleh program ditunjukkan di bawah.

Padam Rekod dari Jadual

Kita boleh menggunakan operasi DELETE untuk menghapus rekod dari jadual. Kita dapat membuang baris dengan pantas menggunakan operasi DELETE dengan klausa WHERE. Sintaks asas untuk pernyataan DELETE adalah:

DELETE dari table_name WHERE some_condition;

Mari lihat contoh. Kami akan menghapus baris dengan id 1001 dari jadual pekerja pangkalan data kami.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") samb.text_factory = str print ("\ n [+] Berhasil disambungkan ke pangkalan data") cur = conn.kursor () cetak ("\ n [+] Kursor berjaya disiapkan") cur.laksanakan ("HAPUS DARI pelajar DI MANA id = 1001") cetak ("\ n [+] Baris telah berjaya dihapus") cur.laksanakan ("PILIH * DARI pelajar") data = cur.fetchall () untuk baris dalam data: cetak (baris) cur.tutup () samb.komit () samb.tutup ()

Kod di atas akan Memadamkan baris dengan ID 1001. Anda dapat melihat dari penyataan SELECT yang dikembalikan bahawa baris telah dikeluarkan. Output program adalah seperti gambar di bawah.

Jatuhkan Jadual

Kita boleh menjatuhkan atau menghapus jadual dengan cepat menggunakan pernyataan SQLite DROP. Sintaks pernyataan DROP adalah seperti yang ditunjukkan di bawah:

DROP jadual_nama meja 

Sekiranya jadual tidak ada, maka SQLite akan membuang kesalahan, jadi untuk mengelakkan ini, kita dapat menggunakan sekiranya ada tag dengan pernyataan DROP. Lihat sintaks di bawah:

DROP table jika ada table_name

Mari kita lihat bagaimana kita boleh menggunakan pernyataan ini dengan ular sawa sqlite3 modul untuk memadam jadual. Dalam program ini, kami akan membuang pelajar jadual yang telah kita buat sebelumnya.

import sqlite3 conn = sqlite3.sambungkan ("sampel.db ") samb.text_factory = str print ("\ n [+] Berhasil disambungkan ke pangkalan data") cur = conn.kursor () cetak ("\ n [+] Kursor berjaya disiapkan") cur.jalankan ("DROP TABLE JIKA ADA pelajar") cetak ("\ n [+] Jadual berjaya digugurkan") cur.tutup () samb.komit () samb.tutup ()

Program di atas akan menghapus jadual pelajarĀ daripada contoh pangkalan data. Kita boleh menggunakan perintah jadual senarai yang telah kita lihat sebelumnya untuk melihat apakah jadual tersebut dihapuskan. Output program adalah seperti gambar di bawah.

Pengecualian Pangkalan Data SQLite

Beberapa pengecualian pangkalan data SQLite mungkin ditimbulkan kerana terdapat beberapa kesalahan. Mari kita lihat sedikit ketika kesalahan tersebut dibangkitkan.

Ini adalah senarai semua pengecualian SQLite; kami dapat menangani pengecualian tersebut dalam program kami menggunakan kaedah asas percubaan / kecuali pengendalian ralat Python.

Kesimpulannya

Itu membawa kita ke akhir panduan komprehensif mengenai kaedah lanjutan untuk bekerja dengan SQLite menggunakan Python. Saya harap anda mempelajari semua aspek SQLite3 menggunakan Python, yang akan membantu kami membina projek Python yang hebat.

Alat Berguna untuk Pemain Linux
Sekiranya anda suka bermain permainan di Linux, kemungkinan anda telah menggunakan aplikasi dan utiliti seperti Wine, Lutris dan OBS Studio untuk meni...
HD Remastered Games untuk Linux yang Tidak Pernah Melancarkan Linux Sebelumnya
Banyak pembangun dan penerbit permainan hadir dengan penghapus HD permainan lama untuk memperpanjang usia francais, harap peminat meminta keserasian d...
Cara Menggunakan AutoKey untuk Mengautomasikan Permainan Linux
AutoKey adalah utiliti automasi desktop untuk Linux dan X11, yang diprogramkan dalam Python 3, GTK dan Qt. Dengan menggunakan skrip dan fungsi MACRO, ...