آموزش مدیریت پایگاه داده در PyQt

3 سال پیش

 آموزش مدیریت پایگاه داده در PyQt

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش مدیریت پایگاه داده در PyQt خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پایتون مختص بازار کار

PyQt API شامل یک سیستم کلاس پیچیده برای ارتباط با بسیاری از پایگاه های داده مبتنی بر SQL است. QSqlDatabase آن دسترسی از طریق یک شیء Connection را فراهم می کند. در زیر لیستی از درایورهای SQL موجود موجود است –

نوع درایور و توضیحات
۱ QDB2

IBM DB2

۲ QIBASE

Borland InterBase Driver

۳ QMYSQL

MySQL Driver

۴ QOCI

Oracle Call Interface Driver

۵ QODBC

ODBC Driver (شامل Microsoft SQL Server)

۶ QPSQL

PostgreSQL Driver

۷ QSQLITE

SQLite version 3 or above

۸ QSQLITE2

SQLite version 2

 

مثال

اتصال با پایگاه داده SQLite با استفاده از روش استاتیک ایجاد می شود –

db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')

 

روشهای دیگر کلاس QSqlDatabase به شرح زیر است –

روش ها و توضیحات
۱ ()setDatabaseName

نام پایگاه داده ای را که اتصال با آن جستجو می شود تعیین می کند

۲ ()setHostName

نام میزبانی را که پایگاه داده روی آن نصب شده است تعیین می کند

۳ ()setUserName

نام کاربری را برای اتصال مشخص می کند

۴ ()setPassword

در صورت وجود، رمز عبور شیء اتصال را تعیین می کند

۵ ()commit

معاملات را انجام می دهد و در صورت موفقیت true برمی گرداند

۶ ()rollback

تراکنش پایگاه داده را عقب می گرداند

۷ ()close

اتصال را می بندد

 

کلاس QSqlQuery قابلیت اجرا و دستکاری دستورات SQL را دارد. هر دو نوع DDL و DML کوئری SQL را می توان اجرا کرد. مهمترین متد در کلاس ()_exec  است که یک رشته حاوی دستور SQL را برای اجرا به عنوان آرگومان می گیرد.

query = QtSql.QSqlQuery()
query.exec_("create table sportsmen(id int primary key, 
   " "firstname varchar(20), lastname varchar(20))")

 

اسکریپت زیر پایگاه داده SQLite sports.db را با جدولی از افراد دارای پنج رکورد ایجاد می کند.

from PyQt4 import QtSql, QtGui

def createDB():
   db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
   db.setDatabaseName('sports.db')
    
   if not db.open():
      QtGui.QMessageBox.critical(None, QtGui.qApp.tr("Cannot open database"),
         QtGui.qApp.tr("Unable to establish a database connection.\n"
            "This example needs SQLite support. Please read "
            "the Qt SQL driver documentation for information "
            "how to build it.\n\n" "Click Cancel to exit."),
         QtGui.QMessageBox.Cancel)
            
      return False
        
   query = QtSql.QSqlQuery()
    
   query.exec_("create table sportsmen(id int primary key, "
      "firstname varchar(20), lastname varchar(20))")
        
   query.exec_("insert into sportsmen values(101, 'Roger', 'Federer')")
   query.exec_("insert into sportsmen values(102, 'Christiano', 'Ronaldo')")
   query.exec_("insert into sportsmen values(103, 'Ussain', 'Bolt')")
   query.exec_("insert into sportsmen values(104, 'Sachin', 'Tendulkar')")
   query.exec_("insert into sportsmen values(105, 'Saina', 'Nehwal')")
   return True
    
if __name__ == '__main__':
   import sys
    
   app = QtGui.QApplication(sys.argv)
   createDB()

 

کلاس QSqlTableModel در PyQt یک رابط سطح بالا است که مدل داده قابل ویرایش را برای خواندن و نوشتن سوابق در یک جدول واحد فراهم می کند. این مدل برای پر کردن یک شی QTableView استفاده می شود. این یک نمای قابل پیمایش و قابل ویرایش را که می تواند در هر پنجره سطح بالا قرار گیرد به کاربر ارائه می دهد.

یک شی QTableModel به روش زیر اعلام می شود –

model = QtSql.QSqlTableModel()

 

استراتژی ویرایش آن را می توان بر روی هر یک از موارد زیر تنظیم کرد –

QSqlTableModel.OnFieldChange همه تغییرات بلافاصله اعمال می شوند
QSqlTableModel.OnRowChange تغییرات زمانی اعمال می شود که کاربر ردیف دیگری را انتخاب کند
QSqlTableModel.OnManualSubmit همه تغییرات ذخیره می شوند تا زمانی که یا ()submitAll  یا ()revertAll فراخوانی شود

مثال

در مثال زیر جدول sportsperson به عنوان یک مدل استفاده می شود و استراتژی به صورت زیر تنظیم شده است:

model.setTable('sportsmen') 
model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)

   model.select()

 

کلاس QTableView بخشی از چارچوب Model/View در PyQt است. شی QTableView به صورت زیر ایجاد می شود –

view = QtGui.QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view

 

این شی QTableView و دو ویجت QPushButton به پنجره QDialog سطح بالا اضافه می شوند. سیگنال ()Clicked  افزودن دکمه به ()addrow متصل می شود که ()insertRow را روی جدول مدل انجام می دهد.

button.clicked.connect(addrow)
def addrow():
   print model.rowCount()
   ret = model.insertRows(model.rowCount(), 1)
   print ret

 

شکاف مربوط به دکمه حذف یک عملکرد lambda را اجرا می کند که یک سطر را حذف می کند ، که توسط کاربر انتخاب می شود.

btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))

 

کد کامل به شرح زیر است –

import sys
from PyQt4 import QtCore, QtGui, QtSql
import sportsconnection

def initializeModel(model):
   model.setTable('sportsmen')
   model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
   model.select()
   model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
   model.setHeaderData(1, QtCore.Qt.Horizontal, "First name")
   model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name")
    
def createView(title, model):
   view = QtGui.QTableView()
   view.setModel(model)
   view.setWindowTitle(title)
   return view
    
def addrow():
   print model.rowCount()
   ret = model.insertRows(model.rowCount(), 1)
   print ret
    
def findrow(i):
   delrow = i.row()
    
if __name__ == '__main__':

   app = QtGui.QApplication(sys.argv)
   db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
   db.setDatabaseName('sports.db')
   model = QtSql.QSqlTableModel()
   delrow = -1
   initializeModel(model)
    
   view1 = createView("Table Model (View 1)", model)
   view1.clicked.connect(findrow)
    
   dlg = QtGui.QDialog()
   layout = QtGui.QVBoxLayout()
   layout.addWidget(view1)
    
   button = QtGui.QPushButton("Add a row")
   button.clicked.connect(addrow)
   layout.addWidget(button)
    
   btn1 = QtGui.QPushButton("del a row")
   btn1.clicked.connect(lambda: model.removeRow(view1.currentIndex().row()))
   layout.addWidget(btn1)
    
   dlg.setLayout(layout)
   dlg.setWindowTitle("Database Demo")
   dlg.show()
   sys.exit(app.exec_())

 

خروجی به شکل زیر است:

Database Handling Output

 

منبع.

 

لیست جلسات قبل آموزش PyQt

  1. آموزش PyQt
  2. آموزش مقدمه PyQt
  3. آموزش Hello World در PyQt
  4. آموزش کلاس های اصلی در PyQt
  5. آموزش استفاده از Qt Designer در PyQt
  6. آموزش سیگنال ها و شکاف ها در PyQt
  7. آموزش مدیریت طرح بندی در PyQt
  8. آموزش ویجت های کلی در PyQt
  9. آموزش کلاس QDialog در PyQt
  10. آموزش کلاس QMessageBox در PyQt
  11. آموزش رابط چندین سند در PyQt
  12. آموزش کشیدن و رها کردن در PyQt
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه