You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的MySQL Connector库存储数据失败求助

问题排查与修复方案

我来帮你梳理下代码里的几个关键问题,这就是数据没法存入MySQL的核心原因:

1. SQL语法错误+注入风险

你直接用f-string拼接SQL语句的方式有问题:字符串类型的email和passw没有被引号包裹,比如当你输入test@mail.com作为邮箱时,生成的SQL会是INSERT INTO id(email, passw) VALUES(test@mail.com,123456);——MySQL会把test@mail.com当成标识符而非字符串值,直接报错。同时这种写法还存在严重的SQL注入风险。

正确的做法是用MySQL Connector支持的参数化查询,它会自动处理字符串的引号和转义:

mycursor.execute("INSERT INTO id(email, passw) VALUES(%s, %s);", (email, passw))

2. 未提交事务

MySQL Connector默认关闭了自动提交功能,你执行完INSERT语句后,数据只是存在于当前会话的缓存里,并没有真正写入数据库。必须调用mydb.commit()来提交事务,才能让数据持久化。

3. 重复创建数据库/表会报错

每次运行代码都会执行CREATE DATABASE login;和CREATE TABLE id (...),第二次运行时因为数据库和表已经存在,会直接抛出错误,导致后续逻辑无法执行。应该改成仅当对象不存在时创建:

mycursor.execute("CREATE DATABASE IF NOT EXISTS login;")
# ...
mycursor.execute("CREATE TABLE IF NOT EXISTS id (email VARCHAR(20), passw VARCHAR(20));")

修正后的完整代码

import mysql.connector

mydb = mysql.connector.connect(
 host="localhost",
 user="root",
 passwd=""
)
mycursor = mydb.cursor()

# 仅在数据库不存在时创建
mycursor.execute("CREATE DATABASE IF NOT EXISTS login;")
mycursor.execute("USE login;")
# 仅在表不存在时创建
mycursor.execute("CREATE TABLE IF NOT EXISTS id (email VARCHAR(20), passw VARCHAR(20));")

# 注册逻辑
email = input("Your email: ")
passw = input("Your password: ")
confirm_pass = input("Confirm password: ")

if passw == confirm_pass:
 print("Successfully registered!")
 # 参数化插入+事务提交
 mycursor.execute("INSERT INTO id(email, passw) VALUES(%s, %s);", (email, passw))
 mydb.commit()
else:
 print("Wrong password!")

内容的提问来源于stack exchange,提问作者user11363434

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:11:39