Advertisement
mspadaru

SQLGUI

Aug 21st, 2012
1,595
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.66 KB | None | 0 0
  1. import sys
  2. from PySide import QtCore, QtGui, QtSql
  3.  
  4. class MainForm(QtGui.QWidget):
  5.     def __init__(self):
  6.         super(MainForm, self).__init__()
  7.         #Database:
  8.         self.db = QtSql.QSqlDatabase.addDatabase("QMYSQL")
  9.         self.db.setHostName("localhost")
  10.         self.db.setDatabaseName("kodekraft")
  11.         self.db.setUserName("root")
  12.         self.db.setPassword("")
  13.         ok = self.db.open()    
  14.         if not ok:
  15.             QtGui.QMessageBox.warning(self, "Error", "Invalid database!")
  16.             return
  17.         # GUI:
  18.         hbox = QtGui.QHBoxLayout(self)
  19.         self.setLayout(hbox)
  20.         left_vbox = QtGui.QVBoxLayout()
  21.         right_vbox = QtGui.QVBoxLayout()
  22.         grid = QtGui.QGridLayout()
  23.         grid.setSpacing(10)
  24.         self.db_table = QtGui.QTableView(self)
  25.         hbox.addLayout(left_vbox)
  26.         hbox.addLayout(right_vbox)
  27.         left_vbox.addWidget(self.db_table)
  28.         left_vbox.addLayout(grid)
  29.         label_fn = QtGui.QLabel('First Name:')
  30.         label_ln = QtGui.QLabel('Last Name:')
  31.         self.e_fn = QtGui.QLineEdit()
  32.         self.e_ln = QtGui.QLineEdit()
  33.         grid.addWidget(label_fn, 1, 0)
  34.         grid.addWidget(self.e_fn, 1, 1)
  35.         grid.addWidget(label_ln, 2, 0)
  36.         grid.addWidget(self.e_ln, 2, 1)
  37.         self.clear_btn = QtGui.QPushButton("Clear")
  38.         self.delete_btn = QtGui.QPushButton("Delete")
  39.         self.refresh_btn = QtGui.QPushButton("Refresh")        
  40.         self.insert_btn = QtGui.QPushButton("Insert")
  41.         self.update_btn = QtGui.QPushButton("Update")
  42.         self.exit_btn = QtGui.QPushButton("Exit")
  43.         right_vbox.addWidget(self.clear_btn)
  44.         right_vbox.addWidget(self.delete_btn)
  45.         right_vbox.addWidget(self.refresh_btn)
  46.         right_vbox.addStretch()
  47.         right_vbox.addWidget(self.insert_btn)
  48.         right_vbox.addWidget(self.update_btn)
  49.         right_vbox.addWidget(self.exit_btn)        
  50.         self.setGeometry(300, 100, 800, 600)
  51.         self.setWindowTitle('Simpsons')
  52.         #Event Listeners:
  53.         self.refresh_btn.clicked.connect(self.refresh_btn_clicked)
  54.         self.insert_btn.clicked.connect(self.insert_btn_clicked)
  55.         self.delete_btn.clicked.connect(self.delete_btn_clicked)
  56.         self.clear_btn.clicked.connect(self.clear_btn_clicked)
  57.         self.update_btn.clicked.connect(self.update_btn_clicked)
  58.         self.exit_btn.clicked.connect(self.exit_btn_clicked)
  59.         #Table:            
  60.         self.model =  QtSql.QSqlQueryModel()
  61.         self.model.setQuery("SELECT * FROM simpsons")
  62.         self.model.setHeaderData(1, QtCore.Qt.Horizontal, self.tr("First Name"))
  63.         self.model.setHeaderData(2, QtCore.Qt.Horizontal, self.tr("Last Name"))
  64.         self.db_table.setModel(self.model)
  65.         self.db_table.hideColumn(0) #hide column 'id'
  66.         self.db_table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows) #select Row
  67.         self.db_table.setSelectionMode(QtGui.QAbstractItemView.SingleSelection) #disable multiselect
  68.         self.show()  
  69.        
  70.     def update_btn_clicked(self):        
  71.         query = QtSql.QSqlQuery()        
  72.         fn = self.e_fn.text()
  73.         ln = self.e_ln.text()
  74.         db_id = self.get_current_id()
  75.         sql = "UPDATE simpsons SET first_name = '%s', last_name = '%s' \
  76.                                  WHERE simpsons_id = '%d'" % (fn, ln, db_id)
  77.         try:
  78.             query.exec_(sql)
  79.             self.db.commit()
  80.         except:
  81.             # Rollback in case there is any error
  82.             self.db.rollback()  
  83.         self.e_fn.clear()
  84.         self.e_ln.clear()
  85.         self.refresh_table()    
  86.            
  87.     def clear_btn_clicked(self):
  88.         query = QtSql.QSqlQuery()
  89.         query.exec_("DROP TABLE IF EXISTS simpsons")
  90.         sql = """CREATE TABLE simpsons (
  91.                 simpsons_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  92.                 first_name  VARCHAR(20),
  93.                 last_name  VARCHAR(20) )"""  
  94.         query.exec_(sql)
  95.         self.refresh_table()  
  96.                
  97.        
  98.     def refresh_btn_clicked(self):
  99.         self.refresh_table()      
  100.        
  101.     def insert_btn_clicked(self):
  102.         query = QtSql.QSqlQuery()
  103.         query.prepare("INSERT INTO simpsons (first_name,\
  104.                    last_name) VALUES (:fn, :ln)")
  105.         fn = self.e_fn.text()
  106.         ln = self.e_ln.text()
  107.         self.e_fn.clear()
  108.         self.e_ln.clear()
  109.         query.bindValue(":fn", fn)
  110.         query.bindValue(":ln", ln)
  111.         try:
  112.             query.exec_()
  113.             self.db.commit()
  114.         except:
  115.             self.db.rollback()
  116.         self.refresh_table()    
  117.        
  118.     def refresh_table(self):        
  119.         self.model.setQuery("SELECT * FROM simpsons")
  120.        
  121.     def delete_btn_clicked(self):
  122.             query = QtSql.QSqlQuery()
  123.             db_id = self.get_current_id()
  124.             sql = "DELETE FROM simpsons WHERE simpsons_id = '%d'" % (db_id)
  125.             try:
  126.                 query.exec_(sql)
  127.                 self.db.commit()
  128.             except:
  129.                 self.db.rollback()
  130.             self.refresh_table()  
  131.            
  132.     def get_current_id(self):
  133.         if self.db_table.currentIndex():
  134.             #index = self.db_table.selectedIndexes()[0].row() <<--You must use this for multiselect
  135.             index = self.db_table.currentIndex().row()
  136.             db_id = self.model.record(index).value("simpsons_id")
  137.             return db_id
  138.     def exit_btn_clicked(self):
  139.         sys.exit()
  140.      
  141.        
  142. def main():    
  143.     app = QtGui.QApplication(sys.argv)  
  144.     main_form = MainForm()  
  145.     sys.exit(app.exec_())  
  146.        
  147. if __name__ == '__main__':
  148.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement