1. Koneksi MySQL Dengan Python dan CherryPy
Salah satu kelebihan Python adalah dukungannya terhadap database, Python sudah
mendukung hampir semua database populer yang banyak digunakan saat ini bahkan
Python sudah mendukung ADO dan ODBC.
Beberapa waktu yang lalu saya membaca sebuah pertanyaan pada salah satu thread
milis ID-Python yang berkaitan dengan koneksi database dengan Python (terutama
menggunakan web framework Django).
Sebenarnya sudah cukup lama saya berniat memposting tulisan yang berkaitan dengan
koneksi database MySQL dengan Python. Untuk menghubungkan Python dengan
MySQL dibutuhkan modul Python yang bernama MySQLdb (mysql-python) yang dapat
diunduh di http://sourceforge.net/projects/mysql-python.
Bagi Anda pengguna Linux Slackware, untuk mempermudah proses installasi dapat
menggunakan script SlackBuild yang bisa diunduh
di http://slackbuilds.org/repository/13.37/development/MySQL-python/.
Python dan MySQL
Disini saya tidak akan menjelaskan cara penginstallasian modul MySQLdb dan MySQL
server (silahkan membaca dokumentasi masing-masing item tersebut). Setelah modul
MySQLdb terinstall, mari kita lakukan percobaan dengan menggunakan konsol Python.
Buka konsol Python, bila menggunakan windows silahkan gunakan IDLE (Python GUI)
atau bila Anda menggunakan Linux ketik "python" pada konsol Linux hingga tampil
konsol Python yang ditandai dengan prompt ">>>"
Berikut contoh kecil yang saya ambil dari dokumentasi mysql-python di http://mysql-
python.sourceforge.net/MySQLdb.html, silahkan dibaca untuk dokumentasi lebih
lengkap.
Import modul MySQLDB dan lakukan koneksi ke MySQL, ketikan statement berikut
pada konsol Python
>>> import MySQLdb
>>> db=MySQLdb.connect(passwd="prens",db="db_teman")
Mengaktifkan cursor dan definisikan serta mengeksekusi query
>>> c=db.cursor()
>>> c.execute('select * from daftar_teman')
Tampilkan data dari query yang sudah kita definisikan
>>> c.fetchone()
Baris perintah diatas akan menampilkan satu baris data dalam bentuk 'Tuple',
contohnya :
2. ('BEJO','LAKI-LAKI','JAKARTA')
Untuk menampilkan data lebih dari satu baris gunakan perintah berikut
>>> c.fetchmany(n)
"n" adalah jumlah baris yang ingin ditampilkan, atau gunakan perintah berikut untuk
menampilkan semua data yang ada
>>> c.fetchall()
Untuk menampilkan data masing-masing value dari data tuple hasil perintah 'fetch'
diatas gunakan perintah berikut ini :
>>> t=c.fetchone()
>>> t[0]
BEJO
>>> t[1]
LAKI-LAKI
>>> t[2]
JAKARTA
Mudah bukan, hasil keluaran yang berupa tuple ini masih dapat kita olah hingga kita
mendapatkan format tampilan yang kita inginkan.
CherryPy dan MySQL
Sekarang kita akan menggabungkan contoh diatas dengan contoh aplikasi CherryPy
yang sebelumnya sudah kita buat dengan sedikit modifkasi berdasarkan contoh yang
ada di dokumentasi CherryPy.
Edit file template "test.html" yang sebelumnya sudah kita buat, menjadi seperti berikut
ini :
<h1>
{{ tes1 }}
</h1>
<table border="1">
<tr>
<td>NAMA</td>
<td>KELAMIN</td>
<td>KOTA</td>
</tr>
{% for data in tes2 %}
<tr>
<td>{{ data[0] }}</td>
<td>{{ data[1] }}</td>
<td>{{ data[2] }}</td>
</tr>
3. {% endfor %}
</table>
Sekarang edit file handler atau file utama aplikasi CherryPy kita dengan nama file
"cherry.py", seperti berikut ini:
import sys
sys.stdout = sys.stderr
import atexit
import threading
import cherrypy
from jinja2 import Environment, FileSystemLoader
import MySQLdb
# mendefinisikan folder penyimpanan file template yang dibuat
env = Environment(loader=FileSystemLoader('/var/www/htdocs/cherry'))
cherrypy.config.update({'environment': 'embedded'})
if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state==0:
cherrypy.engine.start(blocking=False)
atexit.register(cherrypy.engine.stop)
def connect(thread_index):
# membuka dan membuat koneksi ke MySQL server
cherrypy.thread_data.db=MySQLdb.connect('localhost','root','prens','db_teman')
# mengeksekusi fungsi connect
cherrypy.engine.subscribe('start_thread', connect)
class Root(object):
def index(self):
c=cherrypy.thread_data.db.cursor()
c.execute('select * from daftar_teman')
t=c.fetchall()
c.close
tmpl = env.get_template('test.html')
return tmpl.render(
tes1='Koneksi Database CherryPy',
tes2=t
)
index.exposed = True
application = cherrypy.Application(Root(), script_name=None, config=None)
Untuk menggunakan contoh disini pastikan Anda sudah membuat database dan
tabelnya sesuai contoh, sekarang silahkan coba di web browser ketikan
http://localhost/cherry/