FastAPI无法将数据保存至MySQL数据库问题求助
排查FastAPI写入MySQL数据无报错但未入库的问题
最可能的核心原因:未提交数据库事务
MySQL默认不会自动提交事务,使用mysql-connector等驱动时,执行INSERT语句后必须手动调用连接对象的commit()方法,否则操作只会停留在内存中,不会写入数据库。修改你的代码:
@app.post("/add_user") def add_user(user: User): values = (user.NOMBRE, user.APELLIDOS, user.USUARIO, user.EMAIL, user.NACIMIENTO, user.SEXO, user.ALTURA, user.PESO) sql_query = "INSERT INTO Usuarios (Nombre, Apellidos, Usuario, Email, Nacimiento, Sexo, Altura, Peso) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)" mycursor.execute(sql_query, values) mydb.commit() # 添加这行提交事务 return {"message": "Usuario Insertado"}
(注:mydb是你的数据库连接对象,确保它已正确初始化)
其他排查方向
- 验证数据库连接目标:确认代码中连接的是你预期的数据库实例,检查主机地址、端口、数据库名称是否正确,避免连接到测试库或其他无关数据库。
- 检查字段/表名大小写匹配:MySQL在Linux系统下表名和字段名区分大小写,Windows下不区分。确认代码中的
Usuarios表名、Nombre等字段名,和数据库中实际的表结构完全一致(包括大小写)。 - 确认数据类型兼容性:
- 模型中的
NACIMIENTO是datetime.date类型,检查数据库中Nacimiento字段的类型是DATE还是DATETIME,如果是DATETIME,可以将模型字段改为datetime.datetime,或者在插入时转换格式。 - 检查
ALTURA、PESO的浮点类型是否和数据库字段类型匹配(比如数据库是FLOAT还是DECIMAL)。
- 模型中的
- 添加执行结果校验:打印游标执行后的受影响行数,确认SQL是否真正执行:
mycursor.execute(sql_query, values) print(f"受影响行数:{mycursor.rowcount}") # 如果输出0,说明SQL未生效 mydb.commit()
- 捕获数据库异常:添加异常捕获逻辑,排查潜在的隐藏错误:
from mysql.connector import Error @app.post("/add_user") def add_user(user: User): try: values = (user.NOMBRE, user.APELLIDOS, user.USUARIO, user.EMAIL, user.NACIMIENTO, user.SEXO, user.ALTURA, user.PESO) sql_query = "INSERT INTO Usuarios (Nombre, Apellidos, Usuario, Email, Nacimiento, Sexo, Altura, Peso) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)" mycursor.execute(sql_query, values) mydb.commit() return {"message": "Usuario Insertado", "affected_rows": mycursor.rowcount} except Error as e: return {"message": "插入失败", "error": str(e)}
- 校验Postman请求格式:确保请求体是JSON格式,且字段名和
User模型完全一致(比如NOMBRE是大写,不能写成nombre),示例请求体:
{ "NOMBRE": "Yago", "APELLIDOS": "Gómez", "USUARIO": "yagog", "EMAIL": "yago@example.com", "NACIMIENTO": "1995-05-15", "SEXO": "M", "ALTURA": 1.80, "PESO": 75.5 }
- 检查数据库表结构:确认
Usuarios表的所有必填字段都已传入值,没有字段长度限制导致数据被截断(比如NOMBRE字段长度为20,但传入了更长的字符串)。
内容的提问来源于stack exchange,提问作者Yago Gómez
相关产品推荐
相关产品推荐

