警告

本节包含从 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()

第一行创建连接对象,最后一行打开它以供使用。在此之间,我们初始化一些连接信息,包括database name数据库名称,host name主机名称,user name用户名,以及password密码。在这种情况下,我们正在连接到主机bigblue上的MySQL数据库flightdb。在addDatabase()addDatabase()中使用的"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()删除它。