Membuat File Basis Data SQLite Secara Programatis Menggunakan Python
Sekilas Tentang SQLite
SQLite adalah library yang dibuat dalam bahasa C, yang mengimplementasikan basis data yang bersifat self-contained, serverless, minim konfigurasi, dan transaksional. Istilah self-contained dan serverless disini mengindikasikan bahwa SQLite dapat hidup di dalam penyimpanan data komputer, baik sekunder (file di hard drive) maupun primer (memori volatile).
SQLite diciptakan oleh D. Richard Hipp pada tahun 2000 untuk Angkatan Laut Amerika Serikat. Saat itu ia sedang mengerjakan perangkat lunak untuk kapal perang DDG-79 "Oscar Austin". SQLite kemudian menjadi basis data yang paling banyak digunakan di seluruh dunia.
Bagi kalian yang tertarik, simak podcast berjudul The Untold Story of SQLite.
SQLite populer digunakan pada platform mobile (misalnya di dalam sistem operasi Android) dan perangkat lunak mobile serta desktop (via driver ODBC). SQLite juga merupakan basis data yang digunakan oleh banyak aplikasi peramban (Firefox, Chrome, dan lain-lain). Selain itu, SQLite juga merupakan basis data yang secara default digunakan pada aplikasi yang di-generate dengan Django dan Ruby on Rails.
SQLite bersifat weakly-typed dan menggunakan afinitas. Berarti, kita dapat menyisipkan data string ke dalam kolom integer sepanjang hasil parsingnya valid, misalnya "42" (string) menjadi 42.
Basis data SQLite tidak menerapkan dukungan Foreign Key by default.
Tipe Data Umum
Kelas penyimpanan data di SQLite:
- NULL
- INTEGER. signed integer dalam 1, 2, 3, 4, 6, atau 8 bytes tergantung besarnya nilai yang diberikan
- REAL. Pecahan
- TEXT. String biasa (UTF-8, UTF-16BE, atau UTF-16LE)
- BLOB. Data seperti apa adanya
SQLite tidak memiliki format data tanggal/waktu native; yang ada hanya fungsi built-in. Tanggal/waktu umumnya disimpan sebagai string dengan format YYYY-MM-DD HH:MM:SS.SSS
atau integer dalam bentuk epos Unix.
Membuat File Basis Data SQLite3
Gunakan Google Colab supaya kalian bisa menulis kode bukan di komputer kalian.
Impor lib yang diperlukan yaitu sqlite3
dan buat DB baru jika belum ada.
Membuat dan menghapus tabel
Untuk menjalankan query basis data, kita bisa menggunakan metode execute()
pada obyek koneksi dengan dua parameter, yaitu perintah SQL yang hendak dijalankan dan parameter dari perintah SQL itu (jika ada). Parameter kedua ini biasanya digunakan dalam SELECT ... WHERE ...
.
Aktifkan fitur foreign key dengan syntax PRAGMA foreign_keys = ON;
.
Syntax kolom_satu INTEGER PRIMARY KEY AUTOINCREMENT
membuat kolom_satu
sebagai PK dengan tipe data integer. Buat agar dia bertambah satu nilainya secara otomatis pada data baru dengan AUTOINCREMENT
(hanya bisa digunakan bersama INTEGER
).
Pada contoh di atas, kita membuat tabel bernama "Coba" dengan tiga kolom, lalu menghapusnya.
Syntax SELECT name FROM sqlite_master WHERE type='table';
digunakan untuk melihat semua tabel di basis data (karena .tables
tidak bisa dijalankan via modul ini). Pada pemanggilan kedua, terlihat tabel "Coba" sudah berhasil dihapus. Catatan: SQLite juga membuat beberapa tabel lain yang dibutuhkan, misalnya sqlite_sequence
untuk mencatat auto-increment.
Jangan Lupa: .commit()
dan .close()
Jika menjalankan query yang mengubah, menambah, atau menghapus data, panggil commit()
untuk menerapkan perubahan ke file basis data.
Jika sudah selesai berinteraksi dengan basis data, panggil close()
untuk mengakhiri file lock (tidak diperlihatkan di demo ini).
Membuat Tabel dan Menyisipkan Data
Kita akan membuat dua buah tabel: Mahasiswa dan NilaiUjian, lalu menyisipkan data.
(Satu Mahasiswa dapat memiliki nol atau lebih item NilaiUjian.)
Gunakan placeholder ?
untuk mencegah SQL Injection seperti terlihat pada contoh di atas. Di kode-kode berikutnya, placeholder dan string masih digunakan dalam rangka memberi contoh belaka, tapi utamakan placeholder.
Pada contoh di atas, kita membuat tabel baru (jika belum ada: if not exists
) dan menambahkan beberapa record ke dalam tabel itu.
Menampilkan Data
Selanjutnya, coba tampilkan data mahasiswa.
Pada contoh di atas, kita perlu menerima kembalian (return value) dari .execute()
agar dapat menampilkan semua record via loop. Pada contoh sebelumnya, digunakan .fetchall()
untuk secara spesifik mengembalikan list berisi record-record.
Buat tabel terakhir dan sisipkan data.
foreign key (mhs_id) references Mahasiswa(npm)
digunakan untuk menentukan bahwa kolom mhs_id
adalah FK ke tabel Mahasiswa.
Update dan Delete
Kalau kalian sudah mengikuti sejauh ini dan masih ingat syntax untuk UPDATE
dan DELETE
, maka semuanya to the point.
Join
Menggunakan library sqlite3 ini, operasi JOIN
pun dapat dijalankan. Misalnya untuk INNER JOIN
:
Nah, bagaimana jika syntax di atas kita ubah sedikit agar mahasiswa yang tidak punya nilai ujian juga tampil?
Contoh-contoh di atas baru sebagian kecil saja. Kita tidak mendemokan ORDER BY
, GROUP BY
, HAVING
, UNIQUE
, dan lain-lain. Tapi intinya syntax-nya sama saja.