>>> fromPyQt5.QtSqlimportQSqlDatabase>>> # Create the connection>>> con=QSqlDatabase.addDatabase("QSQLITE")>>> con.setDatabaseName("contacts.sqlite")>>> # Open the connection>>> con.open()True>>> con.isOpen()True
>>> importsys>>> fromPyQt5.QtSqlimportQSqlDatabase>>> # Create the connection>>> con=QSqlDatabase.addDatabase("QSQLITE")>>> con.setDatabaseName("contacts.sqlite")>>> # Open the connection and handle errors>>> ifnotcon.open():... print("Unable to connect to the database")... sys.exit(1)
1importsys 2 3fromPyQt5.QtSqlimportQSqlDatabase 4fromPyQt5.QtWidgetsimportQApplication,QMessageBox,QLabel 5 6# Create the connection 7con=QSqlDatabase.addDatabase("QSQLITE") 8con.setDatabaseName("/home/contacts.sqlite") 910# Create the application11app=QApplication(sys.argv)1213# Try to open the connection and handle possible errors14ifnotcon.open():15QMessageBox.critical(16None,17"App Name - Error!",18"Database Error: %s"%con.lastError().databaseText(),19)20sys.exit(1)2122# Create the application's window23win=QLabel("Connection Successfully Opened!")24win.setWindowTitle("App Name")25win.resize(200,100)26win.show()27sys.exit(app.exec_())
1importsys 2 3fromPyQt5.QtSqlimportQSqlDatabase,QSqlQuery 4 5# Create the connection 6con=QSqlDatabase.addDatabase("QSQLITE") 7con.setDatabaseName("contacts.sqlite") 8 9# Open the connection10ifnotcon.open():11print("Database Error: %s"%con.lastError().databaseText())12sys.exit(1)1314# Create a query and execute it right away using .exec()15createTableQuery=QSqlQuery()16createTableQuery.exec(17"""18 CREATE TABLE contacts (19 id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,20 name VARCHAR(40) NOT NULL,21 job VARCHAR(50),22 email VARCHAR(40) NOT NULL23 )24 """25)2627print(con.tables())
28# Creating a query for later execution using .prepare()29insertDataQuery=QSqlQuery()30insertDataQuery.prepare(31"""32 INSERT INTO contacts (33 name,34 job,35 email36 )37 VALUES (?, ?, ?)38 """39)4041# Sample data42data=[43("Joe","Senior Web Developer","joe@example.com"),44("Lara","Project Manager","lara@example.com"),45("David","Data Analyst","david@example.com"),46("Jane","Senior Python Developer","jane@example.com"),47]4849# Use .addBindValue() to insert data50forname,job,emailindata:51insertDataQuery.addBindValue(name)52insertDataQuery.addBindValue(job)53insertDataQuery.addBindValue(email)54insertDataQuery.exec()
>>> # First record>>> query.first()True>>> # Named indices for readability>>> name,job,email=range(3)>>> # Retrieve data from the first record>>> query.value(name)'Linda'>>> # Next record>>> query.next()True>>> query.value(job)'Senior Web Developer'>>> # Last record>>> query.last()True>>> query.value(email)'jane@example.com'
使用导航方法,您可以在查询结果中移动。和.value(),您可以检索给定记录中任意列的数据。
您还可以使用迭代遍历查询中的所有记录while循环与.next():
>>>
>>> query.exec()True>>> whilequery.next():... print(query.value(name),query.value(job),query.value(email))...Linda Technical Lead linda@example.comJoe Senior Web Developer joe@example.com...
>>> query.first()True>>> # Get the index of name>>> name=query.record().indexOf("name")>>> query.value(name)'Linda'>>> # Finish the query object if unneeded>>> query.finish()>>> query.isActive()False
>>> # The connection is closed but still in the list of connections>>> QSqlDatabase.connectionNames()['qt_sql_default_connection']>>> # Remove the default connection>>> QSqlDatabase.removeDatabase(QSqlDatabase.database().connectionName())>>> # The connection is no longer in the list of connections>>> QSqlDatabase.connectionNames()[]>>> # Try to open a removed connection>>> con.open()False
1importsys 2 3fromPyQt5.QtSqlimportQSqlDatabase,QSqlQuery 4fromPyQt5.QtWidgetsimport( 5QApplication, 6QMainWindow, 7QMessageBox, 8QTableWidget, 9QTableWidgetItem,10)1112classContacts(QMainWindow):13def__init__(self,parent=None):14super().__init__(parent)15self.setWindowTitle("QTableView Example")16self.resize(450,250)17# Set up the view and load the data18self.view=QTableWidget()19self.view.setColumnCount(4)20self.view.setHorizontalHeaderLabels(["ID","Name","Job","Email"])21query=QSqlQuery("SELECT id, name, job, email FROM contacts")22whilequery.next():23rows=self.view.rowCount()24self.view.setRowCount(rows+1)25self.view.setItem(rows,0,QTableWidgetItem(str(query.value(0))))26self.view.setItem(rows,1,QTableWidgetItem(query.value(1)))27self.view.setItem(rows,2,QTableWidgetItem(query.value(2)))28self.view.setItem(rows,3,QTableWidgetItem(query.value(3)))29self.view.resizeColumnsToContents()30self.setCentralWidget(self.view)3132defcreateConnection():33con=QSqlDatabase.addDatabase("QSQLITE")34con.setDatabaseName("contacts.sqlite")35ifnotcon.open():36QMessageBox.critical(37None,38"QTableView Example - Error!",39"Database Error: %s"%con.lastError().databaseText(),40)41returnFalse42returnTrue4344app=QApplication(sys.argv)45ifnotcreateConnection():46sys.exit(1)47win=Contacts()48win.show()49sys.exit(app.exec_())
To edit the data in a cell of the table, you can double-click the cell. A convenient delegate widget will show in the cell, allowing you to edit its content. Then you can hit Enter to save the changes.
1importsys 2 3fromPyQt5.QtCoreimportQt 4fromPyQt5.QtSqlimportQSqlDatabase,QSqlTableModel 5fromPyQt5.QtWidgetsimport( 6QApplication, 7QMainWindow, 8QMessageBox, 9QTableView,10)1112classContacts(QMainWindow):13def__init__(self,parent=None):14super().__init__(parent)15self.setWindowTitle("QTableView Example")16self.resize(415,200)17# Set up the model18self.model=QSqlTableModel(self)19self.model.setTable("contacts")20self.model.setEditStrategy(QSqlTableModel.OnFieldChange)21self.model.setHeaderData(0,Qt.Horizontal,"ID")22self.model.setHeaderData(1,Qt.Horizontal,"Name")23self.model.setHeaderData(2,Qt.Horizontal,"Job")24self.model.setHeaderData(3,Qt.Horizontal,"Email")25self.model.select()26# Set up the view27self.view=QTableView()28self.view.setModel(self.model)29self.view.resizeColumnsToContents()30self.setCentralWidget(self.view)3132defcreateConnection():33con=QSqlDatabase.addDatabase("QSQLITE")34con.setDatabaseName("contacts.sqlite")35ifnotcon.open():36QMessageBox.critical(37None,38"QTableView Example - Error!",39"Database Error: %s"%con.lastError().databaseText(),40)41returnFalse42returnTrue4344app=QApplication(sys.argv)45ifnotcreateConnection():46sys.exit(1)47win=Contacts()48win.show()49sys.exit(app.exec_())