Kursus
MySQL adalah sistem manajemen basis data relasional (RDBMS) yang mengadopsi model klien-server. Artinya, komputer ("klien") yang ingin mengakses data harus terhubung ke server RDBMS untuk melakukannya.
Python, di sisi lain, adalah bahasa pemrograman tingkat tinggi yang populer dan serbaguna. Pengembang sering menggunakannya untuk membangun situs web dan perangkat lunak, mengotomatiskan tugas, serta menganalisis data. Python juga dapat digunakan dengan berbagai basis data, termasuk MySQL. Python mendukung pernyataan kueri data, bahasa definisi data, dan manipulasi data. Tutorial ini akan menunjukkan cara bekerja dengan MySQL di Python.
Memulai dengan MySQL di Python
Untuk menggunakan MySQL di Python dari Workspace DataCamp, Anda harus menggunakan integrasi workspace untuk terhubung ke basis data terkelola yang sudah ada. Kita akan membangun basis data dari nol, jadi kita tidak akan menggunakan Workspace DataCamp untuk tutorial ini.
Berikut dua langkah yang harus Anda lakukan untuk mengikuti tutorial ini:
- Pasang server MySQL untuk menyediakan layanan yang diperlukan dalam mengelola basis data. Anda dapat mengunduh dan memasangnya dari situs web MySQL.
- Pasang MySQL connector yaitu driver Python yang membantu Anda mengintegrasikan aplikasi Python dengan basis data MySQL; ini dapat dipasang dengan mudah menggunakan pip (manajer paket Python).
Setelah Anda memasang server MySQL:
- Klon repositori GitHub ini ke mesin lokal Anda – cara mengklon repositori di GitHub.
- Buat dan aktifkan environment virtual – pembuatan environment virtual.
- Pasang paket yang diperlukan menggunakan
pip install -r requirementsdari terminal. - Buat berkas
.envdi direktori root. - Simpan kata sandi untuk mengautentikasi pengguna Anda dengan server MySQL dalam variabel bernama
PASSWORD– Jika Anda tidak menetapkan kata sandi root, maka server tidak memerlukan kata sandi.
Penafian
Setiap berkas di repositori diawali dengan angka untuk menunjukkan urutannya dalam tutorial ini.
Sebagai contoh, 04_data_insertion.py menunjukkan bahwa modul tersebut harus dijalankan ke-4 (setelah modul 01 - 03). Anda juga dapat menjalankan seluruh kode dengan menjalankan 00_execute_all.py.
Membuat koneksi
MySQL mengikuti model server-klien; setiap kali klien ingin mengakses data, ia harus terhubung ke RDBMS.
Cara membuat koneksi dengan server adalah menggunakan metode connect() dari modul mysql.connector…
import os
from mysql import connector
from dotenv import load_dotenv
load_dotenv()
PASSWORD = os.getenv("PASSWORD")
try:
with connector.connect(
host = "localhost",
user = "root",
password = PASSWORD
) as database:
print(database)
except connector.Error as e:
print(e)
"""
<mysql.connector.connection_cext.CMySQLConnection object at 0x00000188FA653970>
"""
Lihat cakupan lengkap argumen untuk metode connect() di dokumentasi.
Ada tiga hal yang perlu diperhatikan dari kode ini:
- Penanganan Exception dan Error: Praktik yang baik untuk menangani error saat membuat koneksi ke server MySQL.
- Tutup koneksi: Kita menggunakan context manager, jadi kita tidak menutup koneksi secara eksplisit menggunakan metode
close(). Secara umum, koneksi harus ditutup setelah Anda selesai mengakses basis data untuk mencegah terjadinya error yang tidak terduga. - Data sensitif: Gunakan variabel lingkungan untuk menyembunyikan informasi sensitif, karena membagikannya menimbulkan risiko keamanan.
Sekarang Anda telah membuat koneksi antara program Python dan server MySQL, Anda siap terhubung ke salah satu dari banyak basis data yang mungkin tersedia di server. Saat ini, kita belum punya apa pun; artinya kita harus membuat basis data baru di dalam server. Mari lihat cara melakukannya di bagian berikutnya.
Catatan: Setiap kali basis data diakses, koneksi dengan server harus dibuat. Pada contoh kode berikutnya, kami akan menghapus bagian ini dari kode untuk mencegah pengulangan di seluruh tutorial. Namun, kode lengkapnya tetap disertakan di codebase.
Membuat basis data baru di MySQL dengan Python
Mulai dari sini, Anda memerlukan keterampilan SQL; kursus Introduction to SQL dari DataCamp adalah titik awal yang baik agar Anda siap.
Cara umum untuk membuat basis data di MySQL adalah sebagai berikut:
CREATE DATABASE book_ratings;
Untuk menjalankan kueri yang sama di Python, Anda harus membuat instance objek cursor().
Dari objek cursor(), Anda dapat mengirim perintah SQL sebagai string ke metode execute(), yang akan mengeksekusi kode tersebut.
Mari buat basis data bernama "book_ratings…"
create_db = "CREATE DATABASE book_ratings"
with database.cursor() as cursor:
cursor.execute(create_db)
Catatan: Menjalankan kode ini berkali-kali akan memunculkan error untuk memberi tahu Anda bahwa basis data sudah ada.
Anda dapat memeriksa basis data yang ada di server sebagai berikut:
show_existing_db = "SHOW DATABASES"
with database.cursor() as cursor:
cursor.execute(show_existing_db)
for db in cursor:
print(db)
"""
('book_ratings',)
('information_schema',)
('mysql',)
('performance_schema',)
('sakila',)
('sys',)
('world',)
"""
Kode di atas menampilkan nama semua basis data yang saat ini ada di server MySQL kita. Ada lebih dari satu karena server MySQL secara otomatis membuat basis data untuk menyediakan akses ke berbagai metadata basis data dan pengaturan server.
Menghubungkan ke basis data yang sudah ada
Misalkan Anda sudah membuat basis data, tetapi Anda belum terhubung ke server; bagaimana Anda akan terhubung langsung ke basis data tersebut?
Mudah.
Teruskan nama basis data sebagai argumen ke metode connect():
try:
with connector.connect(
host = "localhost",
user = "root",
password = PASSWORD,
database = "book_ratings"
) as database:
print(database})
except connector.Error as e:
print(e)
"""
<mysql.connector.connection_cext.CMySQLConnection object at 0x0000016DD8C24970>
"""
Membuat Tabel
Informasi dalam sebuah basis data disimpan di tabel. Tabel hanyalah format yang digunakan untuk menyimpan kumpulan data terkait yang terdiri dari kolom dan baris.
Mungkin ada beberapa tabel dalam satu basis data, meskipun tidak saling terkait. Anda juga bisa memiliki basis data relasional yang berisi satu tabel saja, seperti yang akan kami demonstrasikan di bagian ini – perluas pengetahuan Anda tentang basis data relasional dengan kursus Introduction to Relational Databases in SQL.
Pembuatan tabel mengikuti pendekatan yang mirip dengan yang sudah Anda lihat;
- Tulis perintah SQL sebagai string
- Teruskan ke metode
execute()dari objek cursor.
Pernyataan SQL pada kasus ini adalah CREATE TABLE.
Mari gunakan ini untuk membuat tabel buku:
create_books_table = """
CREATE TABLE books(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100),
genre VARCHAR(100),
release_year YEAR(4)
)
"""
# Create cursor object
with existing_database.cursor() as cursor:
cursor.execute(create_books_table)
existing_database.commit()
Pada baris terakhir kode, Anda mungkin melihat kita menggunakan metode commit() pada objek existing_database. Kita harus melakukannya karena perilaku default MySQL Python connector adalah tidak melakukan commit transaksi secara otomatis.
Setiap kali Anda memodifikasi data untuk sebuah tabel, Anda harus memanggil metode commit() – pelajari lebih lanjut tentang metode commit() di dokumen MySQL.
Beberapa hal penting lain yang perlu diperhatikan dalam kode antara lain:
NOT NULL: Kendala untuk memastikan kolom tidak menerima nilaiNULL.PRIMARY KEY: Nilai unik yang digunakan untuk mengidentifikasi baris tertentu di tabel.AUTO_INCREMENT: Secara otomatis menghasilkan angka unik untuk setiap rekaman baru yang dimasukkan ke tabel.
Kita dapat memeriksa apakah skema kita dibuat dengan benar menggunakan pernyataan DESCRIBE lalu mencetak semua elemennya menggunakan metode fetchall() pada objek cursor kita…
describe_books = "DESCRIBE books"
with existing_database.cursor() as cursor:
cursor.execute(describe_books)
books_schema = cursor.fetchall()
for column in books_schema:
print(column)
"""
('id', b'int', 'NO', 'PRI', None, 'auto_increment')
('title', b'varchar(100)', 'YES', '', None, '')
('author', b'varchar(100)', 'YES', '', None, '')
('genre', b'varchar(100)', 'YES', '', None, '')
('release_year', b'year', 'YES', '', None, '')
"""
Penyisipan data
Pada bagian sebelumnya, kita membuat tabel bernama books di basis data book_ratings. Saat ini, tabel tersebut kosong. Bagian berikut akan membahas dua pendekatan yang dapat Anda gunakan untuk mengisi tabel.
Menyisipkan satu rekaman
Mungkin ada kasus ketika Anda harus menyisipkan satu rekaman ke dalam tabel. Meskipun ini jarang terjadi di dunia nyata, tetap memungkinkan untuk melakukannya sebagai berikut:
# INSERT SINGLE RECORD
insert_single_record = "INSERT INTO books (id, title, author, genre, release_year)\
VALUES (%s, %s, %s, %s, %s)"
single_record = (
"1", "Choose Yourself! Be Happy, Make Millions, Live the Dream", "James Altucher", "self-help", "2013"
)
# Create cursor object
with existing_database.cursor() as cursor:
cursor.execute(insert_single_record, single_record)
existing_database.commit()
Menyisipkan banyak rekaman
Cara yang lebih umum untuk menyisipkan data ke tabel adalah dengan metode executemany(operation_to_perform, seq_of_params) dari objek cursor; ini memungkinkan Anda menyisipkan banyak rekaman sekaligus.
Struktur operasi yang ingin kita lakukan tetap sama; kita hanya memperbarui urutan parameternya.
Berikut tampilannya dalam kode:
multiple_records = [
(
"2",
"Skip the Line: The 10,000 Experiments Rule and Other Surprising Advice for Reaching Your Goals",
"James Altucher",
"self-help",
"2021"
),
(
"3",
"The Power of No: Because One Little Word Can Bring Health, Abundance, and Happiness",
"James Altucher",
"self-help",
"2014"
),
]
with existing_database.cursor() as cursor:
cursor.executemany(insert_multiple_records, multiple_records)
existing_database.commit()
Memilih data
Pernyataan SELECT digunakan untuk mengambil baris yang dipilih dari satu atau lebih tabel dalam basis data. Kita dapat menggunakan SELECT dengan dua cara:
- Memilih kolom tertentu dari sebuah tabel.
select_specific_cols = "SELECT author, release_year FROM books"
with existing_database.cursor() as cursor:
cursor.execute(select_specific_cols)
- Mengembalikan semua kolom menggunakan tanda bintang "*"
# Create cursor object
select_all_cols = "SELECT * FROM books"
with existing_database.cursor() as cursor:
cursor.execute(select_all_cols)
Mengurutkan dan Memfilter data
Mengurutkan dan memfilter data memungkinkan Anda mengembalikan hasil yang relevan dengan memberikan kriteria spesifik yang harus dipenuhi rekaman.
Berikut beberapa contohnya:
WHERE
Pernyataan WHERE memungkinkan Anda memfilter data berdasarkan kondisi tertentu.
Misalnya, katakanlah kita ingin mengambil nama penulis dan judul buku untuk buku yang dibuat sebelum dan termasuk tahun 2010:
condition = "SELECT author, title FROM books WHERE release_year <= 2010"
with existing_database.cursor() as cursor:
cursor.execute(condition)
ORDER BY
Kita juga dapat menggunakan pernyataan ORDER BY untuk mengurutkan hasil dalam urutan menaik (ASC) atau menurun (DESC). Perlu dicatat bahwa mode default selalu urutan menaik kecuali Anda menyatakannya secara eksplisit.
Berikut cara kita mengurutkan data berdasarkan tahun rilis dalam urutan menurun:
order_by_year = "SELECT * FROM books ORDER BY release_year DESC"
with existing_database.cursor() as cursor:
cursor.execute(order_by_year)
LIMIT
Pernyataan LIMIT memungkinkan Anda menentukan jumlah rekaman yang dikembalikan dalam himpunan hasil.
# Create cursor object
define_limit = "SELECT * FROM books LIMIT 3"
with existing_database.cursor() as cursor:
cursor.execute(define_limit)
Kode di atas membatasi jumlah rekaman yang dikembalikan menjadi tiga.
Memperbarui dan Menghapus data
Ada kalanya data berubah, tidak lagi berguna, atau salah. Di bagian ini, Anda akan mempelajari cara menangani kasus-kasus ini dengan pembaruan dan penghapusan.
UPDATE
Kueri UPDATE memungkinkan Anda mengubah nilai yang ada di dalam tabel tanpa memengaruhi strukturnya.
Misalnya, Anda mungkin harus memperbarui sebuah rekaman jika seseorang mengubah namanya; Berikut tampilan kodenya:
update_query = """
UPDATE
books
SET
author = "Big J"
WHERE
author = "James Altucher"
"""
with existing_database.cursor() as cursor:
cursor.execute(update_query)
existing_database.commit()
DELETE
Kueri DELETE memungkinkan Anda menghapus rekaman dari tabel:
drop_record = "DELETE FROM books WHERE release_year <= 2000"
with existing_database.cursor() as cursor:
cursor.execute(drop_record)
existing_database.commit()
Dalam kode ini, kita menghapus semua rekaman dengan tahun rilis kurang dari atau sama dengan 2000.
DROP TABLE
Pernyataan DROP TABLE memungkinkan Anda menghapus tabel secara permanen dari basis data. Menambahkan IF EXISTS memungkinkan Anda mengantisipasi skenario ketika Anda tidak yakin apakah tabel yang ingin dihapus ada, namun ini sepenuhnya opsional.
Mari hapus tabel yang kita buat di basis data book_ratings:
drop_table = "DROP TABLE IF EXISTS books"
with existing_database.cursor() as cursor:
cursor.execute(drop_table)
existing_database.commit()
Kesimpulan
Dalam tutorial ini, Anda telah mempelajari cara membuat koneksi dengan server MySQL di Python, membuat basis data baru, terhubung ke basis data yang sudah ada, membuat tabel, dan melakukan berbagai operasi kueri pada tabel MySQL dari Python.
Lihat sumber daya berikut untuk melanjutkan pembelajaran Anda:
