【发布时间】: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