【问题标题】:python - Error entering data into the databasepython - 将数据输入数据库时​​出错
【发布时间】:2021-09-30 09:20:30
【问题描述】:

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

注册新会员

 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")

【问题讨论】:

    标签: python mysql-python


    【解决方案1】:

    如果配置文件已经存在,您应该在“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 是建议值,您必须根据您的模型定义这些值。 正如我在显示数据库的figure 中看到的那样,您可以使用“id”来了解应该更新哪个用户。对于这种情况,UNIQUE_KEY 将替换为id,而 UNIQUE_KEY_VALUE 将是用户 id需要更新,在您的示例中为 14,但您需要在函数中获取该值,就像您获取其他值一样。

    【讨论】:

    • 谢谢先生的回复:但是如果把这个修改我有错误:self.cur.execute(''' UPDATE users SET add_fullname = 'add_fullname') WHERE 条件; ''', TypeError: 字符串格式化期间并非所有参数都转换
    • WHERE 条件 应根据您需要保存的用户 ID 进行更新。我更新了答案,请见上文。
    • @mgaliazzi 永远不要连接形成 SQL 查询,因为 SW 容易受到 SQL 注入攻击,您必须使用占位符
    • @eyllanesc 连接是什么意思? “val1='{}'”.format(val1) 不是占位符语法吗?
    • @mgaliazzi Doing val1='{}' ".format(val1) 是串联的,容易受到 SQL 注入的影响
    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2014-11-15
    相关资源
    最近更新 更多