如何正确使用Python/PyQt6连接到在xampp安装中运行的MYQSL数据库?

问题描述 投票:0回答:1

作为 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”已经不可能了。 (是的,MYSQL 服务器正在运行。) 其他建议的解决方案似乎没有提到PyQt的使用。

顺便说一句,我用 PHP/HTML 编写了类似的代码,它可以轻松连接到我的数据库。

mysql python-3.x pyqt6
1个回答
0
投票
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!')

	
© www.soinside.com 2019 - 2024. All rights reserved.