QtSql连接多个数据库

QtSql connect to multiple databases

我在使用 Python 3.7 PyQt5 QtSql 时遇到问题。我正在尝试连接多个 MSSQL 数据库,但不知道该怎么做。

我有以下连接功能:

from PyQt5 import QtSql
def connectDb(database_name):
    SERVER_NAME = 'COMPUTER\SQLEXPRESS'
    DATABASE_NAME = database_name
    connString = f'DRIVER={{SQL Server}};'\
                 f'SERVER={SERVER_NAME};'\
                 f'DATABASE={DATABASE_NAME}'
    db = QtSql.QSqlDatabase.addDatabase("QODBC")
    db.setDatabaseName(connString)
    if not db.open():
        print(db.lastError().text())
    return db

要连接到数据库:

db1 = connectDb("Database1")
db2 = connectDb("Database2")

但是,当尝试连接到第二个数据库时,我收到消息:

QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

我想保持多个数据库打开的原因是每次我需要在我的代码中查询不同的数据库时保持打开和关闭数据库连接太慢了。我宁愿让它们全部打开并在程序退出时关闭它们。

当使用 QSqlDataBase is created using the addDatabase() 方法时,通过 connectionName 参数传递的名称存储在字典中,其中键采用该值,如果未传递该参数,则使用 "qt_sql_default_connection" 导致创建在第二个数据库中,您会在字典中得到一个副本,因此 Qt 会发出该警告。一个可能的解决方案是给它传递一个不同的名称(未测试):

from PyQt5 import QtSql


def connectDb(database_name, connection_name):
    SERVER_NAME = "COMPUTER\SQLEXPRESS"
    DATABASE_NAME = database_name
    connString = (
        f"DRIVER={{SQL Server}};" f"SERVER={SERVER_NAME};" f"DATABASE={DATABASE_NAME}"
    )
    db = QtSql.QSqlDatabase.addDatabase("QSQLITE", <b>connection_name</b>)
    db.setDatabaseName(connString)
    if not db.open():
        print(db.lastError().text())
    return db
db1 = connectDb("Database1", "connection_1")
db2 = connectDb("Database2", "connection_2")