有客自远方来52 2024-04-20 21:32 采纳率: 15.3%
浏览 3
已结题

如何从数据库中获取到信息?(语言-python|开发工具-pycharm)

以下是我的部分相关代码,我的想法从修改界面可以直接获取到当时登录用户的信息,然后进行修改,我该如何从数据库中获取到数据并将之自动显示在输入框

# 记录当前用户
currentUser: Tea = None


def login(tuser: Tea):
    con = None
    try:
        con = dbUtil.getCon()
        cursor = con.cursor()
        # 登录判断
        cursor.execute(f"SELECT * FROM Teacher WHERE Tuser='{tuser.Tuser}' AND Tpassword='{tuser.Tpassword}'")
        return cursor.fetchone()
    except Exception as e:
        print(e)
    finally:
        dbUtil.closeCon(con)


界面相关代码Lname,Lage等分别是姓名年龄输入框

self.Lname = QtWidgets.QLineEdit(parent=self.frame_2)
self.Lname.setGeometry(QtCore.QRect(170, 120, 151, 31))
self.Lname.setStyleSheet("QLineEdit{\n"
                         "\n"
                         "    font: 14pt \"等线\";\n"
                         "\n"
                         "border:none;\n"
                         "border-bottom:1px solid rgba(255, 255, 255, 180);\n"
                         "color:rgba(255, 255, 255, 200);\n"
                         "background:transparent;\n"
                         "\n"
                         "}")
self.Lname.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.Lname.setObjectName("Lname")
self.Lphone = QtWidgets.QLineEdit(parent=self.frame_2)
self.Lphone.setGeometry(QtCore.QRect(170, 220, 151, 31))
self.Lphone.setStyleSheet("QLineEdit{\n"
                          "\n"
                          "    font: 14pt \"等线\";\n"
                          "\n"
                          "border:none;\n"
                          "border-bottom:1px solid rgba(255, 255, 255, 180);\n"
                          "color:rgba(255, 255, 255, 200);\n"
                          "background:transparent;\n"
                          "\n"
                          "}")
self.Lphone.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.Lphone.setObjectName("Lphone")
self.Lage = QtWidgets.QLineEdit(parent=self.frame_2)
self.Lage.setGeometry(QtCore.QRect(570, 220, 151, 31))
self.Lage.setStyleSheet("QLineEdit{\n"
                        "\n"
                        "    font: 14pt \"等线\";\n"
                        "\n"
                        "border:none;\n"
                        "border-bottom:1px solid rgba(255, 255, 255, 180);\n"
                        "color:rgba(255, 255, 255, 200);\n"
                        "background:transparent;\n"
                        "\n"
                        "}")
self.Lage.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.Lage.setObjectName("Lage")

数据库相关数据

img


修改界面

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-20 21:32
    关注

    引自免费微信小程序:皆我百晓生

    要实现从数据库获取用户信息并在界面的输入框中自动填充的功能,你需要在login函数中获取到用户信息后,将其转换为相应的界面元素可以接受的数据类型,并设置到对应的QLineEdit对象上。这里是一个详细的步骤:

    1. 首先,确保dbUtil.getCon()返回的是一个连接到数据库的对象,如果还没有这样的函数,你需要创建一个,例如使用SQLite3库:
    import sqlite3
    
    class DBUtil:
        def __init__(self, db_path):
            self.conn = None
            self.db_path = db_path
    
        def getCon(self):
            if not self.conn:
                self.conn = sqlite3.connect(self.db_path)
            return self.conn
    
        def closeCon(self, con):
            if con:
                con.close()
    
    1. login函数中,当查询成功时,将查询结果转换为Tea对象的属性,然后将这些属性设置到对应的输入框(QLineEdit)上:
    def login(tuser: Tea):
        con = dbUtil.getCon()
        cursor = con.cursor()
        cursor.execute(f"SELECT * FROM Teacher WHERE Tuser='{tuser.Tuser}' AND Tpassword='{tuser.Tpassword}'")
        user_data = cursor.fetchone()
    
        # 如果查询结果存在
        if user_data:
            # 将数据转换为Tea对象的属性
            tea = Tea()
            tea.TID, tea.Tname, tea.Tage, tea.Tsex, tea.Tphone, tea.Taddress = user_data
            tea.Tuser = user_data[8]  # 假设Tuser在第九个位置,根据你的数据库结构调整
            tea.Tpassw... = user_data[10]  # 同理,根据数据库结构调整
    
            # 设置到界面的输入框
            self.set_fields_to_input(tea)
    
        else:
            print("Login failed")
    
        dbUtil.closeCon(con)
    
    def set_fields_to_input(tea: Tea):
        self.Lname.setText(tea.Tname)
        self.Lage.setText(str(tea.Tage))
        # ... 对其他字段进行类似处理,比如性别和电话号码
    
    1. set_fields_to_input函数用于将Tea对象的属性值设置到QLineEdit中。记得检查每个字段是否为空,以防止空值被显示。

    2. 如果界面初始化时已经有一个登录状态,你可以尝试在__init__方法中调用login函数并传递当前登录的Tea对象,或者在登录事件触发时执行此操作。

    这样,当用户登录后,他们的信息就会自动填充到相应的输入框中。如果你的数据库是通过ORM(如SQLAlchemy)管理的,那么获取和映射数据的过程会有所不同,但基本思路是一致的。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月21日
  • 创建了问题 4月20日