python - QtSql 连接多个数据库

标签 python sql-server pyqt pyqt5 qtsql

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

关于python - QtSql 连接多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60415884/

相关文章:

python - 在 iPython 中,在 matplotlib.pyplot.show() 之后保持 Python Shell 可用

python - 不知道如何解决 "IndexError: index 0 is out of bounds for axis 0 with size 0"

sql-server - 在 Azure 上运行 MVC4 时出错

python - 如何管理 PyQt5 QTableWidgetItem 中数据的可见性

python - 在数据库中搜索第二天格式

java如何从数据库中取出数据

sql - 哪个更好 : Bookmark/Key Lookup or Index Seek

python - 关于pyuic4的一个错误

python - 单击时如何获取 QMenu 项的名称?

python - Telepot 中的 sendPhoto() 对我的机器人不起作用