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

5 thoughts on “Query MySQL sebagai dictionary menggunakan Python

  1. Sebenarnya dari MySQL-python sendiri sudah disiapkan kok mas.

    Di bagian cursor langsung saja diisikan seperti ini.

    cur = db.cursor(MySQLdb.cursors.DictCursor)

    Nanti hasil query akan langsung menjadi dictionary, bukan array ๐Ÿ˜€

Leave a Reply

Your email address will not be published. Required fields are marked *