Kursus
Data adalah inti dari hampir setiap aplikasi digital yang bisa Anda bayangkan. Dari aplikasi seluler dan gim komputer hingga alat perbankan dan kendaraan otonom, semuanya berbasis data. Di mana semua data ini disimpan? Jawabannya adalah database.
Database adalah kumpulan data terstruktur yang terorganisasi, biasanya disimpan secara elektronik dalam sebuah sistem komputer. Meskipun ada perkembangan jenis database baru (dirancang untuk menangani volume dan variasi data yang meningkat), sejumlah besar data di seluruh dunia masih disimpan dalam apa yang dikenal sebagai database relasional. Database relasional menyimpan data sebagai kumpulan tabel yang sudah didefinisikan dengan baris dan kolom yang terhubung melalui satu atau lebih relasi.
Kemampuan untuk mengolah dan mengekstrak data dari database ini adalah keterampilan esensial dalam industri data dan semakin banyak dicari. Cara standar untuk membuat dan mengelola database adalah SQL (Structured Query Language). SQL adalah fondasi bagi beberapa database relasional paling populer di pasaran, seperti PostgreSQL, Microsoft SQL Server, MySQL, dan SQLite
Dalam tutorial ini, kita akan berfokus pada database berbasis PostgreSQL dan bagaimana Anda dapat membuat, terhubung ke, dan mengelolanya menggunakan Python. Tandem SQL-Python adalah salah satu keterampilan wajib yang perlu Anda kuasai sepanjang perjalanan data science Anda. Untuk menghubungkan Python dengan PostgreSQL, kita akan menggunakan paket psycopg2, adapter database PostgreSQL paling populer untuk Python. Siap dengan tantangannya? Mari mulai!
Memahami PostgreSQL
PostgreSQL adalah database relasional open-source yang ringan dan gratis. Berkat arsitekturnya yang terbukti, keandalan, integritas data, dan integrasi mulus dengan bahasa pemrograman populer lainnya seperti Python dan R, PostgreSQL sangat diterima di industri, dengan perusahaan dari berbagai ukuran dan wilayah menggunakannya.
PostgreSQL menggunakan dan memperluas bahasa SQL dipadukan dengan banyak fitur yang menyimpan dan menskalakan beban kerja data paling kompleks dengan aman.
Untuk mulai menggunakan PostgreSQL, Anda harus menginstalnya terlebih dahulu di komputer Anda. Di situs resmi PostgreSQL, Anda dapat menemukan banyak paket siap pakai dan penginstal PostgreSQL serta arsip kode sumber yang tersedia untuk berbagai platform dan kasus penggunaan.
Untuk tutorial ini, kita akan menggunakan Postgres App, aplikasi asli macOS yang sederhana dan mencakup semua fitur yang diperlukan untuk memulai dengan PostgreSQL, namun ingat bahwa semua paket lain yang tersedia sama validnya, dan sintaks PostgreSQL untuk menjalankan kueri sama di semua paket.
Jika Anda ingin mengetahui lebih banyak tentang PostgreSQL, lihat Panduan Pemula PostgreSQL kami dan sejumlah kursus SQL.
Memahami psycopg2
Untuk tersambung ke database yang sudah dibuat di sistem Anda atau di Internet, Anda harus memberi tahu Python cara mendeteksinya. Dengan kata lain, Anda harus memberi tahu Python bahwa database yang Anda minati adalah database PostgreSQL.
Di Python, ada beberapa opsi yang dapat Anda pilih. Dalam kasus ini, kita akan menggunakan psycopg2, mungkin adapter database PostgreSQL paling populer untuk Python. Psycopg2 memerlukan beberapa prasyarat agar dapat bekerja dengan baik di komputer Anda. Setelah Anda menginstalnya (baca dokumentasi untuk informasi lebih lanjut), Anda dapat memasang psycopg2 seperti paket Python lainnya:
pip install psycopg2
Namun, jika Anda ingin menggunakan psycopg2 secara langsung, Anda juga bisa memasang psycopg2-binary, versi mandiri dari paket tersebut yang tidak memerlukan compiler atau pustaka eksternal. Ini adalah instalasi yang disarankan untuk pengguna baru.
pip install psycopg2-binary
Terakhir, jika Anda menggunakan Python dalam lingkungan Conda, Anda sebaiknya memasang psycopg2 menggunakan instalasi Anaconda:
conda install -c anaconda psycopg2
Sekarang semuanya siap, mari buat koneksi pertama Anda ke sesi PostgreSQL dengan psycopg2!
Menghubungkan Python ke PostgreSQL
Untuk menggunakan Python berinteraksi dengan database PostgreSQL, kita perlu membuat koneksi. Ini dilakukan dengan fungsi connect() dari psycopg2, yang membuat sesi database baru dan mengembalikan instance koneksi baru.
Untuk tutorial ini, kita akan terhubung dengan database bernama “datacamp_courses” yang di-host secara lokal.
conn = psycopg2.connect(database = "datacamp_courses",
user = "datacamp",
host= 'localhost',
password = "postgresql_tutorial",
port = 5432)
Parameter koneksi dasar yang diperlukan adalah:
- database. Nama database.
- user. Nama pengguna yang diperlukan untuk autentikasi.
- password. Kata sandi yang digunakan untuk autentikasi.
- host. Alamat server database (dalam kasus kita, database di-host secara lokal, tetapi bisa juga alamat IP).
- port. Nomor port koneksi (default 5432 jika tidak disediakan).
Membuat tabel di PostgreSQL
Sudah saatnya membuat tabel pertama Anda di database datacamp_courses. Kita ingin membuat tabel dengan informasi tentang beberapa kursus dalam katalog kursus DataCamp. Tabel tersebut memiliki skema berikut:

Spesifikasi memberikan cukup banyak informasi tentang kolom tabel. Kunci utama tabel harus course_id, dan tipe datanya harus integer. Kunci utama adalah sebuah constraint yang memastikan nilai kolom tidak null dan unik. Ini memungkinkan Anda mengidentifikasi secara unik suatu instance tertentu atau sekumpulan instance dalam tabel.
Kolom lainnya menyediakan informasi tentang nama kursus, nama instruktur kursus, dan topik kursus.
Sebelum membuat tabel, penting untuk menjelaskan cara kerja instance koneksi yang baru saja Anda buat. Intinya, koneksi merangkum sebuah sesi database, dan memungkinkan Anda mengeksekusi perintah dan kueri SQL, seperti SELECT, INSERT, CREATE, UPDATE, atau DELETE menggunakan metode cursor(), dan membuat perubahan menjadi persisten menggunakan metode commit() .
Setelah Anda membuat instance cursor, Anda dapat mengirim perintah ke database menggunakan metode execute() dan mengambil data dari tabel menggunakan fetchone(), fetchmany(), atau fetchall().
Terakhir, penting untuk menutup cursor dan koneksi ke database setiap kali Anda telah menyelesaikan operasi. Jika tidak, keduanya akan terus menahan sumber daya di sisi server. Untuk melakukannya, Anda dapat menggunakan metode close() .
Di bawah ini, Anda dapat menemukan kode untuk membuat tabel datacamp_courses:
# Open a cursor to perform database operations
cur = conn.cursor()
# Execute a command: create datacamp_courses table
cur.execute("""CREATE TABLE datacamp_courses(
course_id SERIAL PRIMARY KEY,
course_name VARCHAR (50) UNIQUE NOT NULL,
course_instructor VARCHAR (100) NOT NULL,
topic VARCHAR (20) NOT NULL);
""")
# Make the changes to the database persistent
conn.commit()
# Close cursor and communication with the database
cur.close()
conn.close()
Ini adalah contoh sangat dasar tentang cara membuat tabel di PostgreSQL, namun hal ini dapat menjadi jauh lebih kompleks. Jika Anda ingin mempelajari lebih lanjut cara membuat database PostgreSQL dan mengeksplorasi struktur, tipe data, serta cara menormalkan database, lihat kursus Creating PostgreSQL Database kami.
Mengeksekusi Kueri PostgreSQL Dasar di Python
Tabel datacamp_courses sudah siap; sekarang saatnya menggunakan SQL untuk menjalankan beberapa kueri dasar!
INSERT
Anda mungkin memperhatikan bahwa tabel belum memiliki nilai sejauh ini. Untuk membuat rekaman di tabel datacamp_courses, kita memerlukan perintah INSERT.
cur = conn.cursor()
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to SQL','Izzy Weber','Julia')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Analyzing Survey Data in Python','EbunOluwa Andrew','Python')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to ChatGPT','James Chapman','Theory')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Introduction to Statistics in R','Maggie Matsui','R')");
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES('Hypothesis Testing in Python','James Chapman','Python')");
conn.commit()
cur.close()
conn.close()
Tabel yang dihasilkan akan terlihat seperti ini:
|
course_id |
course_name |
course_instructor |
topic |
|
1 |
Izzy Weber |
Julia |
|
|
2 |
EbunOluwa Andrew |
Python |
|
|
3 |
James Chapman |
Theory |
|
|
4 |
Maggie Matsui |
R |
|
|
5 |
James Chapman |
Python |
SELECT
Membaca data di database SQL mungkin akan sering Anda lakukan dalam perjalanan data science Anda. Ini biasanya disebut kueri SELECT. Untuk saat ini, mari lihat bagaimana kondisi tabel datacamp_courses.
Kita akan memanggil pernyataan klasik SELECT * FROM database_name untuk membaca semua data yang tersedia di tabel. Lalu, kita gunakan metode fetchall() untuk mengambil semua baris yang tersedia. Perhatikan bahwa PostgreSQL secara otomatis membuat indeks numerik untuk kolom course_id.
cur = conn.cursor()
cur.execute('SELECT * FROM datacamp_courses;')
rows = cur.fetchall()
conn.commit()
conn.close()
for row in rows:
print(row)
(1, 'Introduction to SQL', 'Izzy Weber', 'Julia')
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python')
(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory')
(4, 'Introduction to Statistics in R', 'Maggie Matsui', 'R')
(5, 'Hypothesis Testing in Python', 'James Chapman', 'Python')
UPDATE
Data sering kali datang dengan kesalahan. Anda mungkin memperhatikan pada bagian sebelumnya bahwa topik yang terkait dengan kursus “Introduction to SQL” adalah Julia. Setelah memeriksa informasi tentang kursus tersebut, kita menemukan kesalahan. Kita perlu mengubahnya dan menuliskan “SQL” sebagai gantinya. Ini dapat dilakukan dengan pernyataan UPDATE sebagai berikut:
cur = conn.cursor()
cur.execute("UPDATE datacamp_courses SET topic = 'SQL' WHERE course_name = 'Introduction to SQL';")
conn.commit()
conn.close()
DELETE
Terakhir, Anda mungkin ingin menghapus salah satu rekaman di tabel Anda. Misalnya, mari hapus kursus Introduction to Statistics in R:
cur = conn.cursor()
cur.execute("""DELETE from datacamp_courses WHERE course_name = 'Introduction to Statistics in R'""");
conn.commit()
cur.close()
Kueri PostgreSQL Lanjutan di Python
Pada bagian sebelumnya, kita membahas kueri SQL paling dasar. Namun masih banyak yang bisa dipelajari. Mari lihat beberapa kueri yang lebih maju.
ORDER BY
Misalkan Anda ingin mengurutkan database berdasarkan nama instruktur. Anda dapat menggunakan pernyataan ORDER BY:
cur = conn.cursor()
cur.execute('SELECT * FROM datacamp_courses ORDER BY course_instructor')
rows = cur.fetchall()
for row in rows:
print(row)
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python')
(1, 'Introduction to SQL', 'Izzy Weber', 'SQL')
(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory')
(4, 'Hypothesis Testing in Python', 'James Chapman', 'Python')
GROUP BY
Anda mungkin ingin melakukan beberapa fungsi agregat dalam kelompok data yang berbeda. Misalnya, Anda tertarik menghitung jumlah kursus berdasarkan instruktur kursus yang berbeda. Anda dapat melakukan operasi seperti ini dengan fungsi GROUP BY.
cur = conn.cursor()
cur.execute('SELECT course_instructor, COUNT(*) FROM datacamp_courses GROUP BY course_instructor')
rows = cur.fetchall()
for row in rows:
print(row)
('James Chapman', 2)
('Izzy Weber', 1)
('EbunOluwa Andrew', 1)
JOIN
Sampai titik ini, kita hanya bekerja dengan tabel datacamp_course. Namun, Anda baru mulai memanfaatkan potensi penuh database relasional, seperti PostgreSQL, ketika Anda bekerja dengan beberapa tabel sekaligus.
Alat andalan untuk menggabungkan beberapa tabel adalah operasi JOIN. Bayangkan kita memiliki tabel kedua di database bernama programming_languages yang memuat informasi dasar tentang bahasa pemrograman teratas untuk data science, termasuk nama, posisi di Indeks TIOBE, dan jumlah kursus tentang bahasa pemrograman tersebut di Datacamp. Tabelnya terlihat seperti ini:
|
language_id |
language_name |
course_number |
tiobe_ranking |
|
1 |
SQL |
31 |
8 |
|
2 |
Python |
157 |
1 |
|
3 |
R |
132 |
16 |
|
4 |
Julia |
2 |
33 |
|
5 |
Scala |
1 |
38 |
Bayangkan Anda ingin menggabungkan kedua tabel untuk mendapatkan informasi kursus beserta posisi bahasa pada indeks TIOBE. Kita akan menggunakan INNER JOIN untuk hanya mendapatkan informasi bahasa pemrograman yang muncul di tabel datacamp_course.
cur = conn.cursor()
cur.execute("""SELECT course_name, course_instructor, topic, tiobe_ranking
FROM datacamp_courses
INNER JOIN programming_languages
ON datacamp_courses.topic = programming_languages.language_name""")
rows = cur.fetchall()
for row in rows:
print(row)
('Introduction to SQL', 'Izzy Weber', 'SQL', 8)
('Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python', 1)
('Hypothesis Testing in Python', 'James Chapman', 'Python', 1)
Ini hanyalah satu contoh, namun potensi join SQL tidak terbatas, sehingga menjadi topik yang wajib dikuasai. Kursus, tutorial, dan cheatsheet kami tentang join akan membantu Anda memulai.
Memulai dengan SQLAlchemy
Psycopg2 adalah alat yang hebat untuk terhubung dengan database PostgreSQL. Tetapi bagaimana jika Anda harus bekerja dengan database yang di-host di berbagai database SQL, seperti Oracle dan MySQL? Dalam skenario ini, mungkin lebih baik menggunakan alat yang dapat terhubung ke berbagai jenis database SQL. Untuk itu, SQLAlchemy adalah kandidat yang hebat.
Sederhananya, SQLAlchemy memungkinkan pengguna menghubungkan database menggunakan bahasa Python, menjalankan kueri SQL dengan pemrograman berbasis objek, dan menyederhanakan alur kerja.
Meskipun sintaksnya berbeda dibandingkan psycopg2, Anda dapat melakukan hampir semua hal yang sama. Di bawah ini Anda dapat menemukan contoh untuk membuat engine guna terhubung dengan dataset datacamp_courses kita, dan membaca semua data yang tersedia di tabel datacap_course
import sqlalchemy as db
engine = db.create_engine("postgresql://datacamp@localhost:5432/datacamp_courses")
conn = engine.connect()
output = conn.execute("SELECT * FROM datacamp_courses")
print(output.fetchall())
conn.close()
[(3, 'Introduction to ChatGPT', 'James Chapman', 'Theory'),
(5, 'Hypothesis Testing in Python', 'James Chapman', 'Python'),
(2, 'Analyzing Survey Data in Python', 'EbunOluwa Andrew', 'Python'),
(1, 'Introduction to SQL', 'Izzy Weber', 'SQL')]
SQLAlchemy adalah alat hebat lainnya yang layak dipelajari. Untuk melihat sekilas cara kerjanya, lihat Tutorial SQLALchemy kami.
Menggunakan PostgreSQL di DataCamp DataLab
Di DataCamp, kami bekerja keras untuk memudahkan data science dan membuatnya dapat diakses semua orang. Itulah alasan di balik pembuatan DataCamp DataLab, notebook berbasis cloud yang dirancang khusus untuk data science. Anda dapat menganggap DataCamp DataLab sebagai perpaduan Jupyter Notebook dan Google Docs, yang memungkinkan pengguna menulis kode, menganalisis data secara individu atau kolaboratif, dan berbagi wawasan data.
Menghubungkan DataLab ke database PostgreSQL, serta database SQL lainnya, sangat mudah. DataLab memungkinkan Anda terhubung ke sumber data secara aman. Pada saat yang sama, Anda dapat dengan mulus melanjutkan analisis data dengan Python atau R. Anda hanya perlu membuat sebuah integrasi, mengikuti proses tanpa kode yang sederhana, di mana Anda perlu memasukkan kredensial koneksi Anda.
Terakhir, jika Anda ingin mencoba integrasi tetapi tidak memiliki database PostgreSQL untuk dihubungkan, Anda dapat menggunakan salah satu database PostgreSQL contoh kami!
Penasaran dengan DataCamp DataLab? Lihat artikel ini untuk mengetahui lebih lanjut tentang notebook generasi berikutnya untuk data science.
Kesimpulan
Kerja bagus! Dalam tutorial ini, Anda berkenalan dengan PostgreSQL dan mempelajari cara mengelola database tanpa meninggalkan Python, menggunakan paket psycopg2. Namun ini baru awal perjalanan. SQL adalah salah satu bahasa pemrograman yang paling banyak digunakan dalam data science. Bahasa ini juga cukup mudah dipelajari, jadi tidak ada alasan lagi.
Untungnya, Datacamp siap membantu. Berikut beberapa sumber daya yang dapat membantu Anda menjadi mahir dalam PostgreSQL dan SQL secara umum:
FAQs
Apa perbedaan antara psycopg2 dan psycopg2-binary?
psycopg2 adalah paket sumber dan memerlukan compiler C serta pustaka klien PostgreSQL terpasang di sistem Anda. psycopg2-binary adalah versi prakomplilasi yang mencakup semua yang Anda butuhkan untuk mulai dengan cepat. Ini bagus untuk pengembangan dan pembelajaran, tetapi tidak direkomendasikan untuk lingkungan produksi karena potensi ketidakcocokan biner.
Bagaimana cara menangani kesalahan koneksi database di Python?
Anda dapat menangkap dan menangani kesalahan terkait koneksi menggunakan blok try-except di Python. Contohnya:
import psycopg2
from psycopg2 import OperationalError
try:
conn = psycopg2.connect(
database="datacamp_courses",
user="datacamp",
password="postgresql_tutorial",
host="localhost",
port=5432
)
except OperationalError as e:
print(f"An error occurred: {e}")
Ini memungkinkan skrip Anda gagal dengan anggun dan bahkan mencoba ulang koneksi jika diperlukan.
Bagaimana cara tersambung ke database PostgreSQL jarak jauh alih-alih lokal?
Untuk tersambung ke database PostgreSQL jarak jauh, ganti localhost dengan alamat IP atau nama domain server jarak jauh. Pastikan:
- Server database mengizinkan koneksi eksternal.
- Port yang benar (biasanya 5432) terbuka di firewall.
- Berkas PostgreSQL Anda
pg_hba.confdikonfigurasi untuk menerima koneksi jarak jauh.
Bisakah saya menggunakan variabel lingkungan untuk menyimpan kredensial database secara aman?
Ya, menyimpan kredensial sebagai variabel lingkungan lebih aman daripada menanamkannya langsung di kode. Anda dapat mengaksesnya di Python menggunakan os.environ:
import os
conn = psycopg2.connect(
database=os.environ["DB_NAME"],
user=os.environ["DB_USER"],
password=os.environ["DB_PASSWORD"],
host=os.environ["DB_HOST"],
port=os.environ["DB_PORT"]
)
Gunakan alat seperti berkas .env dengan python-dotenv untuk mengelolanya secara lokal.
Bagaimana cara mencegah serangan injeksi SQL saat menggunakan psycopg2?
Selalu gunakan kueri terparametrisasi alih-alih pemformatan string saat menyisipkan data pengguna:
cur.execute("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES (%s, %s, %s)",
('Course Name', 'Instructor', 'Topic'))
Ini mencegah pengguna berbahaya menyuntikkan kode SQL berbahaya ke dalam kueri Anda.
Bagaimana cara memperbarui banyak baris sekaligus di psycopg2?
Anda dapat menggunakan metode executemany() untuk menyisipkan atau memperbarui banyak baris secara efisien:
courses = [
('Course A', 'Instructor A', 'Python'),
('Course B', 'Instructor B', 'R')
]
cur.executemany("INSERT INTO datacamp_courses(course_name, course_instructor, topic) VALUES (%s, %s, %s)", courses)
Tipe data apa yang tersedia di PostgreSQL, dan bagaimana pemetaannya ke Python?
Berikut beberapa tipe data PostgreSQL umum dan padanannya di Python:
| Tipe PostgreSQL | Padanan Python |
|---|---|
| INTEGER | int |
| VARCHAR, TEXT | str |
| BOOLEAN | bool |
| DATE, TIMESTAMP | datetime.date, datetime.datetime |
| NUMERIC | decimal.Decimal |
Bagaimana cara mengekspor data dari PostgreSQL ke CSV menggunakan Python?
Anda dapat menggunakan metode copy_expert() dengan perintah SQL COPY:
with open('courses.csv', 'w') as f:
cur.copy_expert("COPY datacamp_courses TO STDOUT WITH CSV HEADER", f)
Ini berguna untuk membuat cadangan atau mengekspor data untuk analisis.
Bisakah saya menggunakan Jupyter Notebook untuk menjalankan perintah Python-PostgreSQL ini?
Tentu! psycopg2 berjalan mulus di Jupyter. Pastikan koneksi database ditutup dengan benar setelah kueri Anda, karena sesi Jupyter dapat tetap terbuka dan mengonsumsi sumber daya.
Apa cara terbaik untuk men-debug kueri SQL yang gagal di Python?
Anda bisa:
- Mencetak kueri dan parameter sebelum dieksekusi.
- Menggunakan log PostgreSQL untuk menemukan detail lebih lanjut.
- Mengaktifkan logging
psycopg2dengan menyetelconnection.set_isolation_level()atau menggunakan mode echo SQLAlchemy jika memakai antarmuka tersebut.
Saya adalah analis data lepas yang berkolaborasi dengan perusahaan dan organisasi di seluruh dunia dalam proyek ilmu data. Saya juga instruktur ilmu data dengan pengalaman lebih dari 2 tahun. Saya rutin menulis artikel terkait ilmu data dalam bahasa Inggris dan Spanyol, beberapa di antaranya telah diterbitkan di situs tepercaya seperti DataCamp, Towards Data Science, dan Analytics Vidhya. Sebagai ilmuwan data dengan latar belakang ilmu politik dan hukum, tujuan saya adalah bekerja pada irisan kebijakan publik, hukum, dan teknologi, memanfaatkan kekuatan gagasan untuk mendorong solusi serta narasi inovatif yang dapat membantu kita menghadapi tantangan mendesak, khususnya krisis iklim. Saya menganggap diri saya seorang autodidak, pembelajar sepanjang hayat, dan pendukung kuat pendekatan multidisipliner. Tidak pernah ada kata terlambat untuk mempelajari hal baru.

