Nama : Rio Erfian
NIM : 18.04.111.00040
1. Bagaimana cara koneksi ke database ?
Untuk mengkoneksikan database menggunakan modul QtSql. Lalu membuat method
dan menyetting agar terkoneksi dengan database .Membuat variable intansiasi
QSqlDatabase() lalu menambahkan type database yang digunakan dengan method
addDatabase(). Setelah itu mengatur nama databasenya dengan method
setDatabaseName(). Terakhir diberi pesan apakah sudah terkoneksi atau tidak(error).
def openDB(self):
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('music.db')
if not db.open():
self.label.setText("connect db error")
return False
else:
self.label.setText("CONNECT DB READY")
return True
2. Bagaimana cara create tabel ?
Dalam pembuatan table disini menggunakan query seperti pada database pada
umumnya . membuat variable intansiasi dari QSqlQuery(). Lalu membuat query
database didalam perintah exec_(“…”)
def createTabel(self):
query = QtSql.QSqlQuery()
query.exec_("create table listmusic("
"id integer primary key AUTOINCREMENT, "
"nama_penyanyi varchar(20), judul_lagu varchar(20), konten_lagu
varchar(20))")
self.label.setText(self.label.text() + ". Create tabel ok")
return True
3. Bagaimana cara menampilkan isi tabel ?
Menampilkan isi table yang ada di database menggunakan widget QTableView yang
nanti akan dihubungkan dengan database menggunakan method QSqlTableModel().
Hal yang pertama dilakukan adalah mennset table yang ingin ditampilkan dengan
method setTable(). Jika melakukan perubahan langsung dalam table menggunakan
method setEditStrategy() dengan signal OnFieldChange() akan menyimpan data tiap
kali diedit langsung pada GUI nya.
Method setHeaderData() bersifat opsional karena walaupun tidak ada table sudah
menset seperti nama kolom yang ada dalam di database.
def displaytable(self):
self.model.select()
self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
self.model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
self.model.setHeaderData(1, QtCore.Qt.Horizontal, "nama_penyanyi")
self.model.setHeaderData(2, QtCore.Qt.Horizontal, "judul_lagu")
self.model.setHeaderData(3, QtCore.Qt.Horizontal, "konten_lagu")
self.tableView.setModel(self.model)
4. Bagaimana cara menambahkan isi ke dalam tabel ?
Menambahkan isi data ke dalam table ada 2 cara. Pertama menggunakan method atau
perintah dan yang kedua langsung mengisi data pada GUI nya.
Contoh yang pertama menggunakan method insert yang berbasis query.
def insert(self,id,nama_penyanyi,judul_lagu,konten_lagu):
query = QtSql.QSqlQuery()
query.exec_(“insert into listmusic values”
“(‘{}’,‘{}’,’{}’,’{}’)”.format(id,nama_penyanyi,judul_lagu,konten_lagu))
Self.insert(1,”Jihan Audy”,”Sugeng dalu”,”Selamat malam”)
Cara kedua langsung mengisi pada GUI nya langsung dengan syarat harus mebuat
method baris kosong terlebih dahulu
def addrowempty(self):
self.model.rowCount()
ret = self.model.insertRows(self.model.rowCount(), 1)
5. Bagaimana cara menghapus isi tabel ?
Penghapusan data dalam table adalah menghapus baris data tersebut menggunakan
perintah removeRow() berdasar current index atau index yang ditunjuk. Setelah
dihapus kita display ulang tabelnya
def remove(self):
self.model.removeRow(self.tableView.currentIndex().row())
self.displaytable()
LISTING PROGRAM
from PyQt5 import QtWidgets, uic, QtSql, QtCore
import sys
from PyQt5.QtSql import QSqlTableModel
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__()
self.model = QSqlTableModel()
uic.loadUi('music.ui', self)
self.show()
self.openDB()
self.model = QtSql.QSqlTableModel()
self.displaytable("")
self.addrow.clicked.connect(self.addrowempty)
self.pushButtonCari.clicked.connect(self.cari)
def openDB(self):
db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('music.db')
if not db.open():
self.label.setText("connect db error")
return False
else:
self.label.setText("CONNECT DB READY")
return True
def createTabel(self):
query = QtSql.QSqlQuery()
query.exec_("create table listmusic("
"id integer primary key AUTOINCREMENT, "
"nama_penyanyi varchar(20), judul_lagu varchar(20), konten_lagu
varchar(20))")
self.label.setText(self.label.text() + ". Create tabel ok")
return True
def displaytable(self, p_filter):
if p_filter is "":
self.model.setTable('listmusic')
print("no filter")
else:
query = QtSql.QSqlQuery("select * from listmusic "
"where nama_penyanyi like '%"+ p_filter + "%' ")
self.model.setTable("")
self.model.setQuery(query)
print("select * from listmusic "
"where nama_penyanyi like '%"+ p_filter + "%' ")
self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
self.model.select()
self.model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
self.model.setHeaderData(1, QtCore.Qt.Horizontal, "nama_penyanyi")
self.model.setHeaderData(2, QtCore.Qt.Horizontal, "judul_lagu")
self.model.setHeaderData(3, QtCore.Qt.Horizontal, "konten_lagu")
self.tableView.setModel(self.model)
def addrowempty(self):
self.model.rowCount()
ret = self.model.insertRows(self.model.rowCount(), 1)
def remove(self):
self.model.removeRow(self.tableView.currentIndex().row())
self.displaytable("")
def cari(self):
cari = self.lineEditCari.text()
self.displaytable(cari)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Ui()
app.exec_()
Dalam listing program saya membuat database penyimpanan daftar music yang berisi
nama penyanyi, judul lagu, isi/konten lagu.
Method yang saya gunakan :
1. Koneksi dengan database (openDB)
Membuat koneksi dengan database apakah tersambung atau tidak tersambung
(error)
2. Membuat table (createTabel)
Mebuat table dalam database meggunakan query
3. Display table dengan dilengkapi filter (displaytable)
Menampilkan isi table pada database
4. Menambahkan baris kosong pada table (addrowempty)
Membuat baris kosong yang nantinya akan diisi data baru
5. Menghapus baris pada table (remove)
Menghapus baris data pada table sesuai index yng ditunjuk
6. Mencari/menfilter data (cari)
Mencari / menfilter kata yang ingin dicari dengan menggunakan query
(pada program saya memfilter berdasar pada kolom nama_penyanyi)