Pandas read_sql: Query Database ke DataFrame
Blog/Tips & Trik/Pandas read_sql: Query Database ke DataFrame

Pandas read_sql: Query Database ke DataFrame

BimaBima
·24 September 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Pandas read_sql menjalankan query SQL dan mengembalikan hasilnya langsung sebagai DataFrame. Kamu butuh dua hal: koneksi ke database lewat SQLAlchemy, dan string query SQL. Formatnya pd.read_sql(query, connection). Fungsi ini motong langkah ekspor CSV manual, jadi data dari database langsung siap diolah di Python. Buat data besar, pakai parameter chunksize biar nggak kehabisan memori.

Pandas read_sql menjalankan query SQL dan langsung ngembaliin hasilnya sebagai DataFrame.

Nggak perlu lagi ekspor CSV manual dari database, buka file, baru dibaca. Satu baris kode narik data langsung dari sumbernya.

Aku bakal tunjukin cara koneksi, jalanin query, dan hindari error yang paling sering nongol. Semua pakai contoh data transaksi toko yang gampang kamu ikuti.

Apa itu pandas read_sql?

Pandas read_sql adalah fungsi yang menjalankan perintah SQL ke database lalu mengembalikan hasilnya sebagai DataFrame. Kamu kasih dua bahan: query SQL dan koneksi database. Hasilnya tabel yang siap diolah di Python, lengkap dengan nama kolom.

Bedanya sama read_csv yang baca dari file, read_sql baca langsung dari database. Data yang kamu ambil selalu versi terbaru, bukan file lama yang mungkin udah basi.

Ini berguna banget kalau datamu tinggal di PostgreSQL atau MySQL dan kamu males bolak-balik ekspor manual.

Gimana cara koneksi database buat read_sql?

Kamu butuh SQLAlchemy buat bikin koneksi. Ini cara resmi yang didukung pandas versi baru. Bikin engine sekali, lalu pakai berulang.

import pandas as pd
from sqlalchemy import create_engine

# Format: dialect+driver://user:password@host:port/database
engine = create_engine("postgresql+psycopg2://user:pass@localhost:5432/toko")

String koneksi itu berisi jenis database, user, password, dan alamat server. Tiap database punya format sedikit beda. PostgreSQL, MySQL, dan SQLite masing-masing punya dialect sendiri.

Buat SQLite yang cuma file lokal, malah lebih simpel:

engine = create_engine("sqlite:///toko_berkah.db")

Cara menjalankan query dengan read_sql

Setelah engine siap, tulis query SQL sebagai string lalu lempar ke read_sql bareng engine-nya.

query = """
SELECT
    kota,
    COUNT(*) AS jumlah_order,
    SUM(total) AS omzet
FROM transaksi
WHERE tanggal >= '2026-01-01'
GROUP BY kota
ORDER BY omzet DESC
"""

df = pd.read_sql(query, engine)
print(df.head())

Hasilnya DataFrame rapi dengan tiga kolom: kota, jumlah_order, dan omzet. Semua agregasi dikerjain di sisi database, jadi yang masuk ke Python cuma ringkasannya.

Ini lebih hemat memori ketimbang narik semua baris mentah lalu diagregasi di pandas. Biarin database yang kerja berat, Python tinggal terima hasilnya.

Cara handle data besar dengan chunksize

Kalau tabelmu jutaan baris, narik sekaligus bisa bikin memori jebol. Pakai parameter chunksize buat ambil data per potongan.

chunks = pd.read_sql(query, engine, chunksize=10000)

total = 0
for chunk in chunks:
    total += chunk["total"].sum()

print(total)

Dengan chunksize, read_sql ngembaliin iterator, bukan satu DataFrame gede. Kamu proses tiap potongan 10 ribu baris, lalu buang dari memori sebelum ambil potongan berikutnya.

Cara ini yang bikin laptop dengan RAM 8 GB tetap bisa ngolah tabel puluhan juta baris tanpa nge-hang.

Cara aman kirim parameter ke query

Jangan pernah tempel nilai input langsung ke string query pakai f-string. Itu bikin celah SQL injection. Pakai parameter params.

query = "SELECT * FROM transaksi WHERE kota = %(kota)s"
df = pd.read_sql(query, engine, params={"kota": "Bandung"})

Dengan cara ini, nilai "Bandung" diperlakukan sebagai data, bukan bagian dari perintah SQL. Input jahat nggak bisa nyelinap jadi perintah baru.

Kalau kamu masih baru di SQL, konsep dasar SQL wajib kamu pahami dulu sebelum lanjut ke koneksi database.

Contoh kasus: gabung data dari dua sumber

Aku pernah ngolah data toko_berkah yang transaksinya di PostgreSQL tapi data produknya masih di file Excel. read_sql narik transaksi, read_csv narik produk, lalu digabung.

transaksi = pd.read_sql("SELECT * FROM transaksi", engine)
produk = pd.read_csv("master_produk.csv")

gabung = transaksi.merge(produk, on="kode_produk", how="left")

Dari 48.000 baris transaksi, proses narik dan gabung ini selesai dalam 3 detik di laptop biasa. Sebelumnya, waktu masih ekspor manual, langkah yang sama makan 15 menit tiap kali data diperbarui.

Buat gabung DataFrame kayak gini, aku bahas detailnya di pandas merge ala JOIN SQL.

Kesalahan umum saat pakai read_sql

Kesalahan pertama, lupa install driver database. read_sql butuh driver seperti psycopg2 buat PostgreSQL atau pymysql buat MySQL. Kalau belum ada, koneksi gagal sebelum query jalan.

Kesalahan kedua, kolom tanggal jadi teks. Pakai parameter parse_dates biar pandas langsung konversi ke tipe datetime.

df = pd.read_sql(query, engine, parse_dates=["tanggal"])

Kesalahan ketiga, narik semua kolom pakai SELECT bintang padahal cuma butuh tiga. Ini boros memori dan lambat. Sebut kolom yang kamu perlu aja.

Penutup

Pandas read_sql narik hasil query SQL langsung jadi DataFrame, motong langkah ekspor manual. Kamu butuh koneksi SQLAlchemy dan string query, lalu tinggal panggil pd.read_sql.

Buat data besar pakai chunksize, buat input pakai params biar aman, dan pakai parse_dates biar tanggal rapi.

Buat referensi lengkap parameter, cek dokumentasi resmi pandas read_sql. Mau latihan query SQL yang bakal kamu jalanin lewat pandas? Coba latihan di NgulikSQL, gratis buat pemula.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

NumPy reshape: Ubah Bentuk Array (2026)
Tips & Trik
8 Oktober 2026•9 menit baca

NumPy reshape: Ubah Bentuk Array (2026)

Fungsi reshape di NumPy ngatur ulang bentuk array tanpa ngubah datanya. Ini cara pakainya, arti angka -1, dan cara ngeflat array.

BimaBima
NumPy Array: Dasar-Dasar untuk Analis Data (2026)
Tips & Trik
6 Oktober 2026•10 menit baca

NumPy Array: Dasar-Dasar untuk Analis Data (2026)

NumPy array bikin hitungan data di Python jauh lebih cepat dari list biasa. Ini dasar bikin, slicing, dan operasi array buat analis.

BimaBima
Alternatif iterrows yang Lebih Cepat di Pandas
Tips & Trik
3 Oktober 2026•8 menit baca

Alternatif iterrows yang Lebih Cepat di Pandas

iterrows nyaman ditulis tapi lambat. Ini urutan alternatif iterrows di pandas dari yang tercepat, plus benchmark biar kamu tau kapan pakai yang mana.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore