【问题标题】:erratic QSqlDatabase behavior不稳定的 QSqlDatabase 行为
【发布时间】:2019-02-10 12:15:13
【问题描述】:

我打开一个 QSqlDatabase 并使用 db.set[parameter Name] 加载参数,连接 -db.open() 失败,并且在检查 db.parameter 的值时它返回一个空字符串。其他客户端程序中使用的相同表单可以完美运行....原文如此

我正在从配置文件加载参数。我尝试像 db.setUserName('someuser') 一样手动加载它们,结果相同。调试时,检查 db.userName() 我得到了 str ''。自然数据库是不打开的。可能与数据库打开时的环境有关?

@pyqtSlot()                                                                                              
def connectionTest(self):                                                                                
    self.lblTestResult.setText("Connecting to MYSQL server........")                                     
    self.lblTestResult.setStyleSheet("QLabel{background-color: yellow; color: black}")                   
    testMessage = "Connection Failed"                                                                    
    self.con_string = self.read_db_config()                                                              
    try:                                                                                                 
        db = QSqlDatabase.addDatabase("QMYSQL")                                                          
        db.setHostName(self.con_string['host'])                                                          
        db.setUserName(self.con_string['user'])                                                          
        db.setDatabaseName(self.con_string['database'])                                                  
        db.setPassword(self.con_string['password'])                                                      
        ok = db.open()                                                                                   
        if ok:                                                                                           
            testMessage = "Connection Succeeded"                                                         
            self.state = True                                                                            
            self.lblTestResult.setStyleSheet("QLabel{background-color: green; color: white}")            
        else:                                                                                            
            self.lblTestResult.setStyleSheet("QLabel{background-color: red; color: white}")              
        self.lblTestResult.setText(testMessage)                                                          
    except Exception as err:                                                                             
        self.lblTestResult.setText(err)                                                                  
    finally:                                                                                                                                      

我希望参数加载并且数据库成功打开。我已经处理这个问题一段时间了,但没有找到任何关于发生了什么的线索。 旁注:我正在使用 Exception 来克服关闭程序的漂亮 PyQt5 异常处理。

【问题讨论】:

  • ok = db.open() 之后添加行print(db.lastError().text())。输出是什么?此外,添加行 print(self.con_string) 并显示其输出。
  • PS:“关闭程序的好 PyQt5 异常处理”是完全正常和预期的行为。在任何 python 程序中,未处理的异常会立即停止执行,并将回溯打印到 stdout/stderr。如果您想要不同的行为,请使用except-hook
  • db.lastError().text() 会产生预期的“未加载驱动程序”,这是合理的,因为所有 db 参数都是空字符串。关于 con_string 它是一个很好的字典,例如 {'host':'hostName', 'database'::'databaseName, 'user': 'userName', 'password': 'password'} 完全加载了预期。我还尝试手动提供参数,例如 db.setUser('str[userName]} 具有相同的结果。
  • 你在哪个平台上?您是否通过某种 IDE 运行代码?你确定你已经安装了所有必要的 qt 包吗?我怀疑是否所有平台都默认安装了所有的 sql 插件。
  • 好建议 ekhumoro。似乎我已将问题缩小到“驱动程序存在但未加载”我没有提到该表单工作正常但在“其他机器”Windows 8 上正常,Windows 10 没有..我会尝试解决它.

标签: pyqt5 python-3.7 qsqldatabase


【解决方案1】:

按照“Benjamin T”就与“驱动程序可用但未加载”相关的类似问题提出建议,我能够解决问题。我将 libmysql.dll 从 python 3.7/lib/site-packages 文件夹复制到 python 3.7 可执行文件夹,并能够加载驱动程序并连接到 MySQL 数据库。

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 2019-08-02
    • 2012-04-24
    • 2011-04-24
    • 2015-08-19
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多