作为 PyQt/Python 的新手,我试图通过运行简单的代码示例来学习基础知识,例如从教程中修改它们以了解它们是如何工作的。 但到目前为止,“连接到数据库”我还没有取得任何进展。 我写了这个简单的代码(根据教程和论坛答案稍作修改):
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt6.QtSql import QSqlDatabase
def connect_db():
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setDatabaseName("test-db")
db.setUserName("testuser")
db.setPassword("")
db.open()
if not db.isOpen():
print('Failed!')
sys.exit(1)
print('Success!')
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
button = QPushButton("Connect to DB")
button.clicked.connect(connect_db)
self.setCentralWidget(button)
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
代码貌似没有错误,但是就是连接不上DB。访问数据库的设置没问题,因为我可以使用 phpmyadmin 连接到它。
我在 Windows 10 Home 22H2 和 PyCharm 2024.1 社区版上使用 Python 3.12.5/PyQt 6.6.1。 数据库服务器是 xampp 安装(版本 8.2.0)的一部分。 我宁愿使用此数据库服务器,而不是安装单独的数据库服务器,正如针对类似问题反复建议的那样。
在我用谷歌搜索的一些论坛帖子中,有人提到可能缺少 qsqlmysql.dll (或类似的 MariaDB)。建议下载正确的版本并安装。 如果这就是解决方案,我立即面临以下问题:从哪里获取 .dll 文件?什么是正确的版本?如何安装.dll 文件?如果只是复制:到哪个目录? 这些问题对于专家来说可能是显而易见的,但对于像我这样的学习者来说却不是。 另一个网站建议安装“MYSQL Connector”,但据我了解,这是作为一个选项与主要 MYSQL 服务器软件一起安装的。然而,在我的xampp安装过程中,没有这样的选项。我可能需要手动编辑 my.ini 吗? 我尝试修改建议的解决方案
here,但它不起作用(似乎仅适用于Linux?)。 “导入 MYSQLdb”已经不可能了。 (是的,MariaDB 服务器正在运行。) 其他建议的解决方案似乎没有提到PyQt的使用。
顺便说一句,我用 PHP/HTML 编写了类似的代码,它可以轻松连接到我的数据库。
db
是
QSqlDatabase
的实例。当您呼叫
db.open()
时,您就是在呼叫 QSqlDatabase.open
。 这就是为什么我喜欢评论中的那个文档。作为
QSqlDatabase
的实例,
db
也应该有 lastError()
方法。 如果您将其添加到错误消息中,可能会清楚地说明数据库连接不成功的原因。我建议这样的事情:
def connect_db():
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setDatabaseName("test-db")
db.setUserName("testuser")
db.setPassword("")
if not db.open():
print("DB Open Failed:", db.lastError())
sys.exit(1)
print('Success!')