Friday, August 17, 2012

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 :

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

No comments: