Dalam artikel kali ini, saya akan membahas bagaimana cara memasukkan data ke tabel MySQL melalui Python, mulai dari cara mengkoneksikan Python ke MySQL hingga memasukkan data-data yang telah dibuat ke MySQL melalui Python dengan GUI Tkinter.
Sebelum mulai, MySQL dan Python 2.7 harus sudah
terinstall dalam PC anda. Jika belum, anda dapat mendownloadnya di link berikut
ini.
Python 2.7.13:
MySQL Community:
Saat anda menginstall MySQL, maka anda akan diminta
mengisi username dan password, nantinya username dan password ini akan kita
pakai untuk mengkoneksikan Python dan MySQL.
Setelah Python dan MySQL sudah terinstall, maka
langkah selanjutnya adalah membuat database dan tabel pada MySQL, pada artikel
kali ini saya akan membuat database tentang Dota 2 dengan tabel hero dan
abilities. Disini saya anggap pembaca sudah mengerti bagaimana membuat database
dan tabel pada MySQL, jadi saya akan langsung lompat ke database saya. Berikut
database dota2 yang telah saya buat pada MySQL Command Line Client.
Setelah membuat database dan tabel di MySQL, kita akan
membuat sekumpulan data yang akan dibaca oleh python dan menghubungkannya
dengan MySQL. Data yang dibuat adalah data yang berekstensi .csv (Comma
Separated Values). Untuk membuat file .csv ini, saya menggunakan microsoft
excel. Berikut data untuk tabel abilities yang telah saya buat.
Setelah mengetikkan data di microsoft excel, klik save
as, lalu pada kolom “save as type” pilih format CSV (Comma delimited) (*.csv).
Barulah kita dapat memulai program pada Pythonnya.
Berikut adalah link full code yang telah saya buat.
Pertama kita import semua module yang diperlukan
from Tkinter import *
import mysql.connector
import csv, sys
import tkFileDialog
Kita membuat exception handling untuk koneksi ke MySQL
dengan try dan except. Pastikan anda memasukkan nama user dan password MySQL
anda dengan benar, untuk host, karena disini saya hanya mengkoneksikan dengan
MySQL yang berada di PC saya, maka saya gunakan localhost.
try:
conn=mysql.connector.connect(user='root',
password='24Ka103li98sapnjri', host='localhost', database='dota2')
except
mysql.connector.Error as err:
if err.errno ==
errorcode.ER_ACCESS_DENIED_ERROR:
print("Invalid username or
password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
Lalu, semua code yang berada di dalam class
Application(Frame), adalah code untuk GUI dan fungsi-fungsinya.
Di dalam createWidgets anda dapat membuat label,
button, dan interface lainnya. Disini saya menggunakan fungsi grid() untuk
menempatkan interface pada windows.
Pada bagian __init__ memanggil class createWidgets dan
fungsi pack() untuk widgets GUI ini.
def createWidgets(self):
self.lbl_title = Label(self,
text="Dota 2 Insert Databases",
fg="#fff", bg="#007", padx="20px",
pady="8px", font=("Times New Roman", 18))
self.lbl_hero = Label(self,
text="Choose .csv file for hero data", fg="#fff",
bg="#828282", padx="10px", pady="6px",
font=("Times New Roman", 12))
self.btn_hero = Button(self,
text='Browse', width=8, height=2, command=self.openHeroFile)
self.lbl_title.grid(row=0, column=0,
columnspan=3, sticky=N+E+W)
self.lbl_hero.grid(row=1,
column=0,sticky=W)
self.btn_hero.grid(row=2, column=0)
#Initialize
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
Didalam def openHeroFile(self): , adalah program utama untuk memasukkan
data-data dari .csv yang kita buat ke dalam MySQL database.
filename =
tkFileDialog.askopenfilename(filetypes = (("Template files",
"*.csv"), ("All files", "*")))
Code diatas adalah untuk membuat sebuah command untuk memilih file dari
directories kita.
Setelah itu, kita buat code untuk membaca setiap baris yang ada pada
file .csv kita.
with open(filename, 'rb') as
f:
reader = csv.reader(f)
Kita buat try
and except lagi karena ada kemungkinan error dalam pembacaan filenya. Lalu kita
uraikan data-data dari .csv yang telah kita buat. Karena data-data yang ada
pada .csv terpisah oleh tanda ‘;’ maka kita harus menggunakan fungsi split(‘;’)
untuk memisahkan data-datanya.
Setelah itu kita
harus membuat data-data tersebut menjadi string dengan menggunakan perintah
str(). Lalu kita buat perintah command yang akan dieksekusi MySQL. Disini saya
ingin membuat dua buah kondisi, jika ID belum ada di dalam tabel, maka kita
gunakan perintah “insert into”, tetapi jika ID sudah ada di dalam tabel, maka
kita gunakan perintah “update”.
try:
for row in reader:
data = row[0].split(';')
hero_id = str(data[0])
hero_name = str(data[1])
print("hero_id =
" + hero_id)
print("hero_name =
" + hero_name)
cmd = "select hero_id
from hero where hero_id = {};".format(hero_id)
cursor = conn.cursor()
cursor.execute(cmd,
hero_id)
recordExist = 0
for r_row in cursor:
recordExist = 1
if recordExist == 1:
cmd = "update hero
set hero_name=%s where hero_id=%s;"
cursor.execute(cmd,
(hero_name, hero_id))
else:
cmd = "insert into
hero values(%s, %s);"
cursor.execute(cmd,
(hero_id, hero_name))
conn.commit()
cursor.close()
conn.close()
except csv.Error as e:
sys.exit('file %s, line %d: %s'
% (filename, reader.line_num, e))
Terakhir, kita
memanggil class Application yang telah kita buat, dan kita buat aplikasi
tersebut terus mengulang dengan perintah .mainloop(). Lalu jika aplikasi sudah
selesai digunakan, kita destroy dengan perintah .destroy().
Karena
sebelumnya kita telah membuka koneksi Python dengan MySQL, maka yang harus
dilakukan saat sudah selesai menggunakan aplikasi adalah dengan menutup
koneksinya, yaitu dengan perintah .close().
root = Tk()
root.resizable(width=False,
height=False)
root.title("Dota 2
Insert Databases")
app =
Application(master=root)
app.mainloop()
conn.close()
root.destroy()
Anda tinggal
menekan tombol Browse dan pilih file .csv yang telah anda buat, maka otomatis
data-data yang ada dalam file .csv tersebut akan dimasukkan ke dalam tabel
database MySQL yang telah dibuat sebelumnya (dalam hal ini, database=dota2).