mariadb QSqlDatabase连接

yvfmudvl  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(111)

我有一个带有MariaDB数据库的服务器,然后我有一个python程序,它在客户端运行,我有以下代码:

def Connect():
    
    #   Credential reading from register
    servHost = RegRead("servHost")
    servPort = RegRead("servPort")
    dbName = RegRead("dbName")
    __dbUser = RegRead("dbUser")
    __dbPass = RegRead("dbPass")

    con = QSqlDatabase.addDatabase('QODBC3')
    driver = "DRIVER={MariaDB ODBC 3.1 Driver};"
    database = f"Database={dbName};"
    databaseName = driver+database
    con.setDatabaseName(databaseName)
    con.setHostName(servHost)
    con.setPort(servPort)
    if con.open(__dbUser, __dbPass):
        print("Connected")
        return True
    else:
        return False

我在一个pc机上做了我的程序,我有两个部分,所以数据库在localhost,我的pc机同时作为服务器和客户端工作,然后我把它改成了一个定义的主机。在我的pc机上工作的一切,但现在我已经分离了服务器和客户端,连接客户端时遇到问题。方法Connect()return False,我不知道我错过了什么。我还记得我安装了很多东西,让这个工作在我的电脑,但那是很久以前的事了,我不记得我做了什么。在客户端,我安装了MariaDB ODBC连接器,我有驱动程序“MariaDB ODBC 3.1驱动程序”,并创建了一个正确连接到数据库的用户DNS,但是当它在我的程序中运行时不会。它在我的pc中运行,所以我的代码应该是正确的。我想我错过了一些安装,可能是关于驱动程序或一些包,但我不知道是什么。服务器也工作,因为我可以使用户DNS。我没有安装MariaDB服务器(如果没有必要,我不会)。除了ODBC连接器,我没有安装任何东西,我只导入了QSqlDatabase包。

mwngjboj

mwngjboj1#

我解决了,setHostName方法和setPort方法好像不起作用,我想是因为它需要一个QString对象作为参数,我是这样解决的,把主机名和端口添加到驱动程序中

def Connect():
    
    #   Credential reading from register
    servHost = RegRead("servHost")
    servPort = RegRead("servPort")
    dbName = RegRead("dbName")
    __dbUser = RegRead("dbUser")
    __dbPass = RegRead("dbPass")

    con = QSqlDatabase.addDatabase('QODBC3')
    driver = "DRIVER={MariaDB ODBC 3.1 Driver};"+f"Server={servHost};Port={servPort};"    # This is the edit
    database = f"Database={dbName};"
    databaseName = driver+database
    con.setDatabaseName(databaseName)
    if con.open(__dbUser, __dbPass):
        print("Connected")
        return True
    else:
        return False

相关问题