警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
连接到数据库¶
要使用QSqlQuery或QSqlQueryModel访问数据库,首先需要创建并打开一个或多个数据库连接。数据库连接通常通过连接名称来标识,而不是数据库名称。你可以对同一个数据库建立多个连接。QSqlDatabase还支持默认连接的概念,即未命名的连接。当调用QSqlQuery或QSqlQueryModel的成员函数时,如果这些函数需要一个连接名称参数,而你没有传递连接名称,那么将使用默认连接。当你的应用程序只需要一个数据库连接时,创建默认连接非常方便。
注意创建连接和打开连接之间的区别。创建连接涉及创建类QSqlDatabase的实例。连接在打开之前是不可用的。以下代码片段展示了如何创建默认连接并打开它:
db = QSqlDatabase.addDatabase("QMYSQL") db.setHostName("bigblue") db.setDatabaseName("flightdb") db.setUserName("acarlson") db.setPassword("1uTbSbAs") ok = db.open()
第一行创建了连接对象,最后一行打开它以供使用。在中间,我们初始化了一些连接信息,包括数据库名称、主机名称、用户名和密码。在这种情况下,我们正在连接到主机bigblue上的MySQL数据库flightdb。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()将其删除。