警告
本节包含从 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()
第一行创建连接对象,最后一行打开它以供使用。在此之间,我们初始化一些连接信息,包括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()
删除它。