Gemetar Pak Tua

Pagi ini, seperti biasa, menempuh perjalanan membelah kota dari arah pinggir timur menuju tengah. Mengantar anak sekolah kembali menjadi rutinitas pagi, setelah masa liburan usai. Perjalanan lancar-lancar saja, sepeda motor melaju nyaris tanpa hambatan. Hingga akhirnya harus berhenti sejenak di lampu merah perempatan Polsek Depok.

Sesaat ketika kendaraan-kendaraan berhenti, seorang bapak-bapak tua sedang dibantu turun dari sebuah becak. Si bapak berdiri di samping jalan, di depan becak, sementara bapak tukang becak mengambil sebuah perlak (karpet plastik).

Tubuh si bapak tua tergetar-getar, capingnya goyang kesana-kemari. Tongkat bambu yang dipegang olehnya, tak mampu meredam gempa yang lahir dari usianya. Tak lama kemudian, karpet plastik terhampar. Lalu si bapak tua ini dipandu oleh bapak tukang becak menuju karpet tadi, yang ternyata adalah singgasana bagi si bapak tua.

Tampak kesusahan ketika tubuh renta itu berusaha mengangkat kakinya, menapak lantai trotoar yang sebenarnya ‘hanya’ sekitar 10cm saja tingginya. Pelan-pelan si bapak didudukkan oleh pak becak, tubuh yang renta itu gagal mendarat di tengah singgasana. Luruh seketika di sudut karpet. Seketika pula, magnitude gempa seolah mengombak. Getaran semakin hebat, si bapak tua belum berani melepaskan tongkat bambunya meskipun pantatnya sudah berhasil menyentuh lantai.

Tangan kiri yang berpegangan pada tongkat bambu itu, lalu turun pelan-pelan. Seiring tangan kanannya meraih sesuatu dari tas lusuh yang ternyata dia selempangkan di dadanya. Pelan, lebih pelan dari getaran gempa usianya, lebih pelan juga dari detikan pergantian warna lampu di dekatnya, hingga akhirnya tangan kanan itu berhasil mengeluarkan sebuah toples plastik.

Si bapak tukang becak tampak tidak nyaman, dan sibuk memeriksa becaknya. Mungkin becaknya bermasalah, mungkin juga hatinya yang bermasalah.

Lampu sudah hijau, semua kepala pengendara seketika berubah arah. Motor dan mobil kembali melaju. Getaran kendaraan oleh tidak halusnya jalanan, mungkin mengingatkan getaran gempa usia yang tadi singgah di perempatan. Paling tidak, itu yang terjadi padaku.

vale, demi apapun

el rony, menimbang harga diri.

Query MySQL sebagai dictionary menggunakan Python

Hai, halo..

Tulisan ini sekedar catatan saja, kebetulan baru saja memindah bahasakan program buatan Uda @ivanlanin (SELAMAT ULANG TAHUN!) yang berbasis PHP di sini, menjadi bahasa Python.

Sebelumnya, perlu saya sampaikan bahwa repository github di atas adalah repository corpus Bahasa Indonesia untuk keperluan Natural Language Processing. Perlu saya ceritakan sedikit juga bahwa corpus itu dibangun oleh om Jim Geovedi untuk keperluan robot-robot yang dia bikin. Dalam penyusunan corpus tersebut, om Jim dibantu oleh Uda Ivan salah satunya dengan menyediakan data lexicon Bahasa Indonesia.

Berkas kode dari Uda Ivan di dalam repository tadi sebenarnya adalah dump data dari MySQL menjadi berkas json. Saya sebagai cheerleader tentu saja merasa perlu untuk ikut ngrusuhi –yak mulai di sini saya sudah capek ber-EYD. maafkan saya haha–.

Fetch All

Bagi Anda yang sudah terbiasa dengan pemrograman PHP, tentu tidak asing dengan fungsi fetchall baik ketika menggunakan pdo maupun cli. Fungsi ini mengembalikan query sql menjadi array.

Di Python, fungsi inipun ada juga. Dalam hal ini saya menggunakan MySQL-python untuk koneksi ke MySQL. Tetapi ada “kelemahan” dari fungsi ini di Python, dimana keluaran dari fungsi tersebut adalah list (list juga array sih..tapi..) bukan dictionary (semacam list dengan key,value. bodhone ngono, aku kan bodho).

Nah, karena di baris-baris di dalam kode Uda Ivan banyak menggunakan key value ini, maka saya bikinlah script ini, agar query database keluar sebagai dictionary. Berikut scriptnya:

def FetchAllAssoc(cursor, sql):
    try:
        result = []
        cursor.execute(sql)
        cols   = tuple([field[0].decode('utf8') for field in cursor.description])
        for row in cursor.fetchall():
            result.append(dict(zip(cols,row)))
    except Exception as e:
        result = {"error": str(e)}
    return result

Penggunaannya tentu saja mudah, misalnya saja kode di atas disimpan sebagai file utils.py, maka begini:

import MySQLdb #you'll get this module by installing MySQL-python

from utils import FetchAllAssoc 

db = MySQLdb.connect('host','user','pass','dbname')
cur = db.cursor()

sql = "SELECT a,b FROM c WHERE a IS NOT NULL"

result = FetchAllAssoc(cur,sql)

#if you want to see the result, use pprint to get nice output
from pprint import pprint
pprint(result)

#or you can iterate the value
for row in result:
    print row['key']

Demikian, nggak ada yang istimewa bukan? Gapapa, yang istimewa itu Jogja.

vale, demi senam otak

el rony — tunggal guru, tunggal ngelmu, ojo nggeguyu

woya kelupaan, fork saya belum dimerge. kalau mau lihat fork-fork-an saya, di sini