PyQt5包括不需要安装任何额外Python库,就可用于操作SQLite,MySQL,Oracle,PostgreSQL和其他的数据库的工具。
1.连接数据库
QSqlDatabase类负责连接数据库和处理事务。 要建立与数据库的连接,必须调用此类的静态addDatabase()方法。其格式为:
addDatabase (QString type, QString connectionName ='')
addDatabase (QSqlDriver driver, QString connectionName ='')
type的类型及含义如下:
类型 描述
QDB2 IBM DB2
QIBASE Borland InterBase驱动程序
QMYSQL MySQL驱动程序
QOCI Oracle调用接口驱动程序
QODBC ODBC驱动程序(包括Microsoft SQL Server)
QPSQL PostgreSQL驱动程序
QSQLITE SQLite版本3或以上
QSQLITE2 SQLite版本2
QTDS Sybase Adaptive Server
connectionName为连接的名称。
addDatabase()方法返回一个QSqlDatabase类的实例,它表示建立连接的数据库。 QSqlDatabase方法有(详见http://doc.qt.io/qt-5/qsqldatabase.html):
setHostName(QString host):设置数据库的主机。
setPort(int port):设置连接数据库的主机商品。
setDatabaseName(QString name): 设置数据库名称、目录(sqlite数据库)或连接串(ODBC);
setUserName(QString name): 设置访问数据库的用户名;
setPassword(QString name): 设置访问数据库对应用户名的密码;
setConnectOptions(QString options = ''):该函数要在连接打开之前调用。对不同数据库可设的参数值请参考(http://pyqt.sourceforge.net/Docs/PyQt4/qsqldatabase.html#setConnectOptions)
open() 或open(QString user, QString password) :打开数据库,如果成功返回True,否则返回False.
注意!
在创建到数据库的连接之前,应该创建一个应用程序对象(QApplication对象的一个实例)。 如果没有这样做,PyQt将无法下载指定数据库格式的驱动程序,也不会创建连接。
要打开的数据库必须已经存在于磁盘或服务器上。 唯一的例外是SQLite数据库,如果打开时不存在,将动自动创建。
isOpen():如果数据库已打开,返回True;否则,返回False。
isOpenError(): 如果打开数据库连接时发生错误,返回True; 否则返回False。 可以使用lastError()读取错误信息。
transaction(): 在数据库上开始一个事务。 如果操作成功,则返回true。 否则,它返回false。
commits(): 如果驱动程序支持事务并且transaction()已经启动,则向数据库提交事务。 如果操作成功,则返回true。 否则,返回false。
rollback():如果驱动程序支持事务并且transaction()已经启动,则向数据库提出取消事务。 如果操作成功,则返回true。 否则,返回false。
lastError():返回QSqlError实例,为数据库时发生的最后一个错误的信息。
connectionName():返回数据库连接信息。
tables ([QSql.TableType type = QSql.Tables]):返回数据库表list. type参数可为:
QSql.Tables,0x01:所有用户表
QSql.SystemTables,0x02:内部表
QSql.Views,0x04:所表用户视图
QSql.AllTables,0xff:用户表、内部表和用户视图
record ( QString tablename):返回一个 QSqlRecord 实例,包含表名为tablename的表结构。
primaryIndex(): 返回一个 QSqlIndex 实例,包含表名为tablename的主索引。
close():关闭数据库连接。
除了addDatabase()静态方法外,QSqlDatabase类还有以下静态方法:
contains (QString connectionName = '']):如果数据库连接列表包含connectionName,则返回true; 否则返回false。
connectionNames(): 返回包含所有连接名称的列表。
database (QString connectionName = '', bool open = True):返回名为connectionName的数据库连接。 数据库连接必须是已经用addDatabase()添加的连接。 如果参数open为True(默认),并且数据库连接尚未打开,则调用此函数时会打开。 如果没有指定connectionName,则使用默认连接。 如果connectionName在数据库列表中不存在,则返回无效的连接。
cloneDatabase (QSqlDatabase other, QString connectionName):克隆other数据库连接,连接名为connectionName。
removeDatabase(QString connectionName):从数据库连接列表中删除connectionName数据库连接。
isDriverAvailable(QString name):name驱动存在,返回True;否则,返回False.
drivers():返回所有可用数据库驱动程序的列表。
下面代码为连接各种数据库并打开的操作:
from PyQt5 import QtWidgets, QtSql
import sys
#创建一个应用程序对象,否则数据库支持将不起作用
app = QtWidgets.QApplication(sys.argv)
#打开SQLite数据库
con1 = QtSql.QSqlDatabase.addDatabase(’QSQLITE’)
con1.setDatabaseName(’c://work//data.sqlite’)
con1.open()
con1.close()
#打开MySQL数据库
con2 = QtSql.QSqlDatabase.addDatabase(’QMYSQL’)
con2.setHostName(“somehost”);
con2.setDatabaseName(“somedb”);
con2.setUserName(“someuser”);
con2.setPassword(“password”);
con2.open();
con2.close()
#通过ODBC打开Access数据库
con3 = QtSql.QSqlDatabase.addDatabase(“QODBC”);
con3.setDatabaseName(“DRIVER = {Microsoft Access Driver(* .mdb)};
FIL = {MS Access}; DBQ = c:/work/data.mdb“);
con3.open()
con3.close()