【问题标题】:QtSql connect to multiple databasesQtSql 连接多个数据库
【发布时间】:2020-02-26 14:15:21
【问题描述】:

我在使用 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.

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

【问题讨论】:

    标签: python sql-server pyqt pyqt5 qtsql


    【解决方案1】:

    当使用addDatabase() 方法创建QSqlDataBase 时,通过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", connection_name)
        db.setDatabaseName(connString)
        if not db.open():
            print(db.lastError().text())
        return db
    db1 = connectDb("Database1", "connection_1")
    db2 = connectDb("Database2", "connection_2")
    

    【讨论】:

    • 我不知道如何标记为正确,但我现在已经做到了。我的应用程序运行得如此之快,以至于每次我不得不查询不同的数据库时都无需连接和断开连接。
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2019-07-10
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多