首页 > 解决方案 > python - 将数据输入数据库时​​出错

问题描述

数据库中已经注册了一个新会员,但是在进入个人资料修改页面并添加其他信息时,它是在新的一行中注册的,并且与注册会员的信息不同。

注册新会员

 def add_users(self):
            add_fullname = self.line_fullname.text()
            add_username = self.line_username.text()
            add_Email = self.line_email.text()
            add_password = self.line_password.text()
            add_phone = self.line_telephon.text()
            add_birthday = self.dateofbirth.text()
            add_profession = self.line_profession.text()
            add_Country = self.line_country.text()
            add_keyone = self.keyone.text()
            add_keytwo = self.keytwo.text()
            add_newpassword = self.new_pwd.text()
    
            self.cur.execute(''' SELECT add_username FROM users=add_username''')
            data = self.cur.fetchall()
                
                self.cur.execute(''' INSERT INTO users(add_fullname, 
    add_username, add_Email, add_password, add_phone, 
    add_birthday, add_profession, add_Country, add_keyone, add_keytwo, add_newpassword) 
    VALUE (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s  ) ''',
    (add_fullname, add_username, add_Email, add_password, add_phone, add_birthday, 
add_profession, add_Country, add_keyone, add_keytwo, add_newpassword))
                    self.mysql_db.commit()
                    self.line_fullname.clear()
                    self.line_username.clear()
                    self.line_email.clear()
                    self.line_password.clear()

填充配置文件代码:

def save_profil(self):
        self.tabWidget.setCurrentIndex(6)
        add_fullname = self.line_fullname.text()
        add_Email = self.line_email.text()
        add_phone = self.line_telephon.text()
        add_birthday = self.dateofbirth.text()
        add_profession = self.line_profession.text()
        add_Country = self.line_country.text()
        add_keyone = self.keyone.text()
        add_keytwo = self.keytwo.text()
        add_newpassword = self.new_pwd.text()
        self.cur.execute(''' INSERT INTO users(add_fullname, add_Email, add_phone, add_birthday, add_profession, 
add_Country, add_keyone, add_keytwo, add_newpassword) 
                                    VALUE (%s, %s, %s, %s, %s, %s, %s, %s, %s  ) ''',
                         (add_fullname, add_Email, 
add_phone, add_birthday, add_profession,
                          add_Country, add_keyone, add_keytwo, add_newpassword))
        self.mysql_db.commit()
        print("profil edited")

这是注册信息,注册成功

这是它在数据库中的显示方式

现在,当您转到个人资料页面填写其余信息时

这是错误,这个新信息没有和会员信息记录在同一行,而是保留了另一个新行

标签: pythonmysql-python

解决方案


如果配置文件已经存在,您应该在“save_profil”函数中使用 UPDATE 而不是 INSERT。

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition; 

您还需要指明应该更新哪个用户

WHERE 条件

我还建议您阅读用户 ID 或您在表中定义的另一个唯一键。因此,您可以更新正确的用户。

前任:

def save_profil(self):
    self.tabWidget.setCurrentIndex(6)
    add_fullname = self.line_fullname.text()
    add_Email = self.line_email.text()
    add_phone = self.line_telephon.text()
    add_birthday = self.dateofbirth.text()
    add_profession = self.line_profession.text()
    add_Country = self.line_country.text()
    add_keyone = self.keyone.text()
    add_keytwo = self.keytwo.text()
    add_newpassword = self.new_pwd.text()

    query = "UPDATE users SET add_fullname=%s, add_Email=%s, add_phone=%s, add_birthday=%s, add_profession=%s, add_Country=%s, add_keyone=%s, add_keytwo=%s, add_newpassword= %s WHERE (UNIQUE_KEY = %s)"
    data = (add_fullname, add_Email,add_phone, add_birthday, add_profession,add_Country, add_keyone, add_keytwo, add_newpassword, UNIQUE_KEY_VALUE)

    self.cur.execute(query,data)

    self.mysql_db.commit()
    print("profil edited")


请注意,UNIQUE_KEY 和 UNIQUE_KEY_VALUE 是建议值,您必须根据您的模型定义这些值。正如我在显示数据库的中看到的那样,您可以使用“id”来知道应该更新哪个用户。对于这种情况,UNIQUE_KEY 将替换为id,而 UNIQUE_KEY_VALUE 将是需要更新的用户 id,在您的示例中,它将是 14,但是您需要在函数中获取该值,就像您获得其他值一样。


推荐阅读