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.
{{ 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>
{% 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/
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 :
('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>>>> 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 :
{{ 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>
{% 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/