警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

连接到数据库

要使用QSqlQueryQSqlQueryModel访问数据库,首先需要创建并打开一个或多个数据库连接。数据库连接通常通过连接名称来标识,而不是数据库名称。你可以对同一个数据库建立多个连接。QSqlDatabase还支持默认连接的概念,即未命名的连接。当调用QSqlQueryQSqlQueryModel的成员函数时,如果这些函数需要一个连接名称参数,而你没有传递连接名称,那么将使用默认连接。当你的应用程序只需要一个数据库连接时,创建默认连接非常方便。

注意创建连接和打开连接之间的区别。创建连接涉及创建类QSqlDatabase的实例。连接在打开之前是不可用的。以下代码片段展示了如何创建默认连接并打开它:

db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("bigblue")
db.setDatabaseName("flightdb")
db.setUserName("acarlson")
db.setPassword("1uTbSbAs")
ok = db.open()

第一行创建了连接对象,最后一行打开它以供使用。在中间,我们初始化了一些连接信息,包括数据库名称主机名称用户名密码。在这种情况下,我们正在连接到主机bigblue上的MySQL数据库flightdbaddDatabase()"QMYSQL"参数指定了用于连接的数据库驱动程序的类型。Qt包含的数据库驱动程序集显示在支持的数据库驱动程序表中。

代码片段中的连接将是默认连接,因为我们没有传递第二个参数给addDatabase(),即连接名称。例如,这里我们建立了两个名为"first""second"的MySQL数据库连接:

firstDB = QSqlDatabase.addDatabase("QMYSQL", "first")
secondDB = QSqlDatabase.addDatabase("QMYSQL", "second")

在这些连接初始化之后,为每个连接调用open()以建立实时连接。如果open()失败,它将返回false。在这种情况下,调用lastError()以获取错误信息。

一旦建立了连接,我们可以从任何地方调用静态函数 database(),并传入连接名称以获取指向该数据库连接的指针。如果我们不传递连接名称,它将返回默认连接。例如:

defaultDB = QSqlDatabase.database()
firstDB = QSqlDatabase.database("first")
secondDB = QSqlDatabase.database("second")

要删除数据库连接,首先使用close()关闭数据库,然后使用静态方法removeDatabase()将其删除。