有客自远方来52 2024-04-18 16:40 采纳率: 15.3%
浏览 4
已结题

为什么数据没有插入到数据库表中?(语言-python|开发工具-pycharm)

以下是我的代码,注册页面显示注册成功,但是数据库表中数据却没有增加?该怎么解决
数据库模块代码

def add(tea: Tea):
    con = None
    try:
        con = dbUtil.getCon()
        cursor = con.cursor()
        # 判断用户名是否重复
        check_sql = f"SELECT Tuser FROM Teacher WHERE Tuser='{tea.Tuser}'"
        cursor.execute(check_sql)
        con.commit()
        count = cursor.fetchone()
        print(tea.Tuser)
        print(count)
        if count is None:
            return True
        # 添加数据
        sql = f"INSERT INTO Teacher (Tname,Tage,Tsex,Tphone,Taddress,Tuser,Tpassword) VALUES('{tea.Tname}','{tea.Tage}','{tea.Tsex}','{tea.Tphone}','{tea.Taddress}','{tea.Tuser}','{tea.Tpassword}')"
        cursor.execute(sql)
        con.connmit()
        return cursor.rowcount
    except Exception as e:
        print(f"插入时发生错误:{e}")
        if con is not None:
            con.rollback()
        return 0
    finally:
        dbUtil.closeCon(con)


登录逻辑代码

def addTea(self):
    Tuser = self.TuserInput.text()
    if Tuser.strip() == "":
        self.x = show_custom_message_box("注意!!!", "用户名不能为空!")
        return
    Tpass = self.TpassInput.text()
    if Tpass.strip() == "":
        self.x = show_custom_message_box("注意!!!", "密码不能为空!")
        return
    Tname = self.TnameInput.text()
    if Tname.strip() == "":
        self.x = show_custom_message_box("注意!!!", "姓名不能为空!")
        return
    Tage = self.TageInput.text()
    if Tage.strip() == "":
        self.x = show_custom_message_box("注意!!!", "年龄不能为空!")
        return
    Tphone = self.TphoneInput.text()
    if Tphone.strip() == "":
        self.x = show_custom_message_box("注意!!!", "联系电话不能为空!")
        return
    if self.manRadio.isChecked():
        Tsex = '男'
    else:
        Tsex = '女'
    Tadd = self.TaddInput.toPlainText()
    if Tadd.strip() == "":
        self.x = show_custom_message_box("注意!!!", "家庭住址不能为空!")
        return
    addtea = Tea(Tuser, Tpass, Tphone, Tname, Tsex, Tage, Tphone, Tadd)
    result = addTeaDao.add(addtea)
    if result > 0:
        self.x = show_custom_message_box("系统提示", "注册成功!")
        self.set()
    else:
        self.x = show_custom_message_box("系统提示", "注册失败!")

  • 写回答

1条回答 默认 最新

  • 檀越@新空间 2024-04-18 16:51
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题分析: 根据您提供的代码,可能出现数据没有插入到数据库表中的原因有以下几点:

    1. 数据库连接出错:可能是连接数据库时出现了异常,导致无法正常插入数据。
    2. 数据不满足插入条件:在代码中,首先会进行重复性检查,如果用户名已存在,则不进行插入操作。所以有可能是数据中的用户名已存在导致插入失败。
    3. 数据插入操作出错:在插入数据库时,可能出现了异常或者数据不满足表结构的要求,导致插入失败。

    解决方案:

    1. 检查数据库连接:确保数据库连接成功,可以尝试打印出连接信息,检查是否有错误信息。
    2. 检查重复性判断逻辑:在添加数据前,需要先判断用户名是否已存在。请确认查询语句是否正确,并打印出查询结果进行查看。可以尝试直接执行插入语句,绕过重复性判断逻辑,查看插入是否成功。
    3. 检查插入语句:确保插入语句正确,并且数据满足数据库表结构的要求。可以尝试打印出插入语句,检查是否有错误。
    4. 打印异常信息:在插入操作中,捕获异常并打印出错误信息,可以帮助定位具体出错的地方。

    修改后的代码:

    数据库模块代码:

    def add(tea: Tea):
        con = None
        try:
            con = dbUtil.getCon()
            cursor = con.cursor()
            # 判断用户名是否重复
            check_sql = f"SELECT Tuser FROM Teacher WHERE Tuser='{tea.Tuser}'"
            cursor.execute(check_sql)
            count = cursor.fetchone()
            print(tea.Tuser)
            print(count)
            if count is not None:
                return False
            # 添加数据
            sql = f"INSERT INTO Teacher (Tname,Tage,Tsex,Tphone,Taddress,Tuser,Tpassword) VALUES('{tea.Tname}','{tea.Tage}','{tea.Tsex}','{tea.Tphone}','{tea.Taddress}','{tea.Tuser}','{tea.Tpassword}')"
            cursor.execute(sql)
            con.commit()
            return cursor.rowcount
        except Exception as e:
            print(f"插入时发生错误:{e}")
            if con is not None:
                con.rollback()
            return 0
        finally:
            dbUtil.closeCon(con)
    

    登录逻辑代码:

    def addTea(self):
        Tuser = self.TuserInput.text()
        if Tuser.strip() == "":
            self.x = show_custom_message_box("注意!!!", "用户名不能为空!")
            return
        Tpass = self.TpassInput.text()
        if Tpass.strip() == "":
            self.x = show_custom_message_box("注意!!!", "密码不能为空!")
            return
        Tname = self.TnameInput.text()
        if Tname.strip() == "":
            self.x = show_custom_message_box("注意!!!", "姓名不能为空!")
            return
        Tage = self.TageInput.text()
        if Tage.strip() == "":
            self.x = show_custom_message_box("注意!!!", "年龄不能为空!")
            return
        Tphone = self.TphoneInput.text()
        if Tphone.strip() == "":
            self.x = show_custom_message_box("注意!!!", "联系电话不能为空!")
            return
        if self.manRadio.isChecked():
            Tsex = '男'
        else:
            Tsex = '女'
        Tadd = self.TaddInput.toPlainText()
        if Tadd.strip() == "":
            self.x = show_custom_message_box("注意!!!", "家庭住址不能为空!")
            return
        addtea = Tea(Tuser, Tpass, Tphone, Tname, Tsex, Tage, Tphone, Tadd)
        result = addTeaDao.add(addtea)
        if result:
            self.x = show_custom_message_box("系统提示", "注册成功!")
            self.set()
        else:
            self.x = show_custom_message_box("系统提示", "注册失败!")
    

    注意事项:

    • 修正了代码中的错误:con.connmit() 应为 con.commit()
    • 在插入操作前进行重复性判断,如果用户名已存在,则不进行插入操作。修改了判断逻辑,当查询结果不为空时,返回False。
    • 在插入操作中增加了con.commit(),确保数据插入到数据库中。
    评论

报告相同问题?

问题事件

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