#Pyhton 2. Belajar CRUD & Koneksi Database dengan PyMySQL

Pada pembuatan aplikasi yang terpenting adalah tempat penyimpanan data yang ada dalam aplikasi tersebut atau yang sering kita sebut dengan Database. Pada artikel ini saya akan berbagi pengalaman saya dalam membuat koneksi ke database dan CRUD di pyhton desktop menggunakan PyQt5. Sebelum masuk, buatlah database dengan nama dbyhton dan buat tabel data dengan struktur seperti berikut

struktur tabel data
  • Install PyMySQL

Di artikel yang saya buat ini, saya menggunakan PyMySQL sebagai package yang akan menghubungkan pyhton ke databasenya. Untuk databasenya sendiri, saya menggunakan XAMPP. Langkah pertama yang dilakukan adalah menginstall package PyMySQL nya terlebih dahulu dengan menuliskan script berikut di CMD teman-teman :

pip install pymysql

tunggu sampai installasi selesai. Setelah kita akan cek apakah package PyMySQL sudah terinstall dengan benar di perangkat kita atau belum. Cara nya dengan menuliskan :

import pymysql

pada pyhton-crompt teman-teman. Jika hasilnya seperti di bawah maka installasi berhasil.

cek install PyMySQL
  • Membuat Desain GUI

Kemedian langkah selanjutnya yaitu membuat desain tampilan GUI menggunakan Qt Designer. Buat lah desain seperti gambar berikut.

desain GUI

Setelah membuat desain seperti gambar di atas, Jangan lupa nama objek dari LineEdit dan Button dirubah dan disesuikan. Lalu simpan desain tersebut di folder yang teman-teman inginkan.

Kemudian convert desain tersebut ke dalam bentuk python file(.py). Untuk melakukan convert desain ui ke dalam py bisa dilihat di artikel saya yang sebelumnya atau klik disini. Proses convert ini dilakukan agar kita bisa mendapatkan file pyhton dari ui tersebut yang nantinya kita bisa otak-atik.

Apabila proses covert sudah selesai lalu buka file tersebut(yang berektensi .py) menggunakan Pyhton-IDLE atau Python text editor seperti PyCharm.

  • Membuat Koneksi ke Database

Untuk melakukan koneksi ke database, kita harus menginport terlebih dahulu package PyMySQL di baris setelah from PyQt5 import QtCore, QtGui, QtWidget. Seperti gambar di bawah

import pymysql

Kemudian kita membuat fungsi koneksi. Berikut syntak fungsi koneksi tersebut.

Fungsi Koneksi

def koneksi(self):
con = pymysql.connect(db='dbpython', user='root', passwd='', host='localhost', port=3306, autocommit=True)
cur = con.cursor()
if(cur):
self.messagebox("Koneksi", "Koneksi Berhasil")
else:
self.messagebox("Koneksi", "Koneksi Gagal")

fungsi di atas akan menghubungkan koneksi ke database yang telah kita buat selumnya. Selain itu juga, di dalam fungsi tersebut terdapat fungsi untuk memunculkan messagebox. Jadi ketika program di run maka akan muncul messagebox yang isi nya koneksi berhasil atau koneksi gagal.

Fungsi Messagebox

def messagebox(self, title, message):
mess = QtWidgets.QMessageBox()
mess.setWindowTitle(title)
mess.setText(message)
mess.setStandardButtons(QtWidgets.QMessageBox.Ok)
mess.exec_()

kemudian fungsi koneksi tersebut kita akan taruh di fungsi setupUi. Fungsi setupUi ini adalah fungsi utamanya, jadi ketika program di run maka fungsi koneksi akan otomatis di panggil. Letakkan fungsi koneksi dengan menuliskan script berikut

self.koneksi()
memanggil fungsi koneksi

kemudian run program dan cek apakah koneksi berhasil atau gagal.

  • Menyimpan data ke Database

Untuk menyimpan data yang ada di aplikasi GUI nya. Terlebih dahulu kita akan membuat fungsi save. Fungsi ini akan memanggil data-data yang ada di tiap LineEdit. Kemudian melakukan query INSERT SQL ke dalam tabel yang ada di database. Fungsi ini di buat di bawah fungsi messagebox.

Fungsi save

def save(self):
firstname = self.FirstName.text()
lastname = self.LastName.text()
address = self.Address.toPlainText()
phone = self.Phone.text()
insert = (firstname, lastname, address, phone)
print(insert)
con = pymysql.connect(db='dbpython', user='root', passwd='', host='localhost', port=3306, autocommit=True)
cur = con.cursor()
sql = "INSERT INTO data(first_name, last_name, address, phone)" + \
"VALUES"+str(insert)
data = cur.execute(sql)
if(data):
self.messagebox("SUKSES", "Data Barang Tersimpan")
else:
self.messagebox("GAGAL", "Data Barang Gagal Tersimpan")
Untuk isian address saya menggunakan widgets QTextEdit.

Kemudian panggil fungsi save tersebut ketika kita meng-click button save. Berikut cara pemanggilan fungsinya :

self.Save.clicked.connect(self.save)

letakkan script di atas di bawah baris self.Save.setObjectName(“Save”) seperti gambar di bawah

memanggil fungsi save

run program, isi data kemudian click button save lihat apakah proses menyimpan data berhasil atau tidak.

  • Menampilkan Data dari Database

Sama seperti menyimpan data, untuk menampilkan data juga kita terlebih dahulu membuat fungsi Tampil untuk menampilkan data di database. Dan memanggil fungsi tersebut ketika meng-click button check. Data yang ditampikan berdasarkan nama depan/first name nya.

Fungsi Tampil

def Tampil(self):
firstname = self.FirstName.text()
db = pymysql.connect(db='dbpython', user='root', passwd='', host='localhost', port=3306, autocommit=True)
cursor = db.cursor()
cursor.execute("SELECT * FROM data WHERE first_name='"+str(firstname)+"'")
data = cursor.fetchall()
if (data):
for
tp in data:
self.LastName.setText("" + tp[1])
self.Address.setText("" + tp[2])
self.Phone.setText("" + tp[3])
self.messagebox("INFO","Data Ada")
else:
self.messagebox("INFO", "Data belum ada")

panggil fungsi tersebut pada button check seperti gambar di bawah.

memenggil fungsi Tampil pada button Check
  • Mengupdate Data di Database

untuk menghapus data juga kita terlebih dahulu membuat fungsi Hapus untuk menampilkan data di database. Dan memanggil fungsi tersebut ketika meng-click button update. Data yang diupdate berdasarkan nama depan/first name nya.

Fungsi Update

def update(self):
firstname = self.FirstName.text()
lastname = self.LastName.text()
address = self.Address.toPlainText()
phone = self.Phone.text()
con = pymysql.connect(db='dbpython', user='root', passwd='', host='localhost', port=3306, autocommit=True)
cur = con.cursor()
sql = "UPDATE data SET last_name=%s, address=%s, phone=%s WHERE first_name=%s"
data = cur.execute(sql, (lastname, address, phone, firstname))
if (data):
self.messagebox("SUKSES", "Data Berhasil Di Update")
else:
self.messagebox("GAGAL", "Data Gagal Di Update")

dan panggil fungsi update di atas pada button update seperti gambar di bawah kemudian coba program. Apakah data berhasil di update atau tidak.

memanggil fungsi update
  • Menghapus Data

Sama seperti menyimpan data, untuk menghapus data juga kita terlebih dahulu membuat fungsi delete untuk menghapus data di database dengan query SQL DELETE. Dan memanggil fungsi tersebut ketika meng-click button delete. Data yang diahapus berdasarkan nama depan/first name nya.

Fungsi Hapus

def delete(self):
firstname = self.FirstName.text()
con = pymysql.connect(db='dbpython', user='root', passwd='', host='localhost', port=3306, autocommit=True)
cur = con.cursor()
sql = "DELETE FROM data where first_name=%s"
data = cur.execute(sql, (firstname))
if (data):
self.messagebox("SUKSES", "Data Berhasil Di HAPUS")
else:
self.messagebox("GAGAL", "Data GAGAL Di HAPUS")

panggil fungsi delete di atas pada button DELETE seperti gambar di bawah kemudian coba program. Apakah data berhasil di hapus atau tidak.

memanggil fungsi delete
  • Menghapus Isian

Pada desain di atas terdapat button CLEAR. Button ini berfungsi untuk menghapus isian yang ada di dalam LineEdit. Script untuk menghapus isian tersebut kita letakkan pada fungsi clear. Berikut script fungsi clear tersebut

Fungsi clear

def clear(self):
self.FirstName.clear()
self.LastName.clear()
self.Address.clear()
self.Phone.clear()

panggil fungsi clear di atas pada button CLEAR seperti pada button yang lain kemudian coba program. Apakah data isian berhasil di hapus atau tidak.

Terakhir coba program dan fungsi-fungsi button nya, apabila program yang temen-temen buat berjalan dengan lancar berarti teman-teman berhasil membuat CRUD dan Koneksi Database pada Aplikasi Desktop Python.

Next, kita akan belajar cara menampilkan data dari database ke dalam tabel dan lain-lain. Apabila ada saran atau komentar bisa komen saja di bawah. Terima kasih !!