python - 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")
解决方案
如果配置文件已经存在,您应该在“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,但是您需要在函数中获取该值,就像您获得其他值一样。
推荐阅读
- javascript - jQuery Chosen Multiple Select
- java - 具有私有构造函数的 Java 子类产生编译错误
- amazon-web-services - 获取 AWS 用户的 MultiFactorAuthAge 的当前值
- python - Loop through days and create custom week in pandas
- javascript - ES6 为什么必须返回一个承诺?
- javascript - 使用 javascript 将字符串显示为模态
- android - Moshi Json 注释不适用于 proguard
- python - 箱线图多索引
- angular - 将 nginx 配置为 Angular 中的服务器资产文件
- docker - Docker 注册表管理界面