连接到PyQt5中的多个数据库

时间:2019-11-18 07:42:32

标签: python pyqt connection pyqt5 qsqldatabase

我需要连接到两个不同的数据库和服务器。现在,我只能使用以下代码连接到一个数据库:

def createConnection()
    global db
    db = QSqlDatabase.addDatabase('QODBC')
    db.setDatabaseName('DRIVER={SQL Server};SERVER=%s;DATABASE=%s;UID=%s;PWS=%s;' % (SERVER1, DATABASE1, USERNAME1, PASSWORD1))
    if db.open():
        print("connected")
        return True
    else:
        print("failed")
        return False

然后在我的代码中的某处调用这样的内容:

if createConnection():
    qry = QSqlQuery(db)
    qry.prepare("SELECT * FROM tbl_name")
    qry.exec()
    while qry.next()
        col1 = qry.value("column1")
        col2 = qry.value("column2")

现在,我还必须连接到另一个不同的数据库:SERVER2, DATABASE2, USERNAME2, PASSWORD2。我该怎么办?

2 个答案:

答案 0 :(得分:0)

为什么不创建接受变量的函数。

def createConnection(SERVER, DATABASE, USERNAME, PASSWORD)
    global db
    db = QSqlDatabase.addDatabase('QODBC')
    db.setDatabaseName('DRIVER={SQL Server};SERVER=%s;DATABASE=%s;UID=%s;PWS=%s;' % (SERVER, DATABASE, USERNAME, PASSWORD))
    if db.open():
        print("connected")
        return True
    else:
        print("failed")
        return False

在调用时提供这些变量。

if createConnection(SERVER1, DATABASE1, USERNAME1, PASSWORD1):
    qry = QSqlQuery(db)
    qry.prepare("SELECT * FROM tbl_name")
    qry.exec()
    while qry.next()
        col1 = qry.value("column1")
        col2 = qry.value("column2")

答案 1 :(得分:0)

如果要多个连接,则必须为每个连接赋予唯一的名称。如果未提供名称,则将使用默认连接,并且将删除任何以前的连接。

所以您需要执行以下操作:

def createConnection(conn, server, dbase, user, pwd)
    if QSqlDatabase.contains(conn):
        QSqlDatabase.removeDatabase(conn)
    db = QSqlDatabase.addDatabase('QODBC', conn)
    db.setDatabaseName('DRIVER={SQL Server};SERVER=%s;DATABASE=%s;UID=%s;PWS=%s;' % (server, dbase, user, pwd))
    if db.open():
        print("connected")
        return True
    else:
        print("failed")
        return False

然后执行:

CONN1 = 'conn_01'
CONN2 = 'conn_02'
...

if createConnection(CONN1, SERVER1, DATABASE1, USERNAME1, PASSWORD1):
    qry = QSqlQuery(QSqlDatabase.database(CONN1))
    qry.prepare("SELECT * FROM tbl_name")
    qry.exec()
    while qry.next()
        col1 = qry.value("column1")
        col2 = qry.value("column2")