Django数据存储报错:时间类型语法无效,邮件发送成功但未入库
解决Django邮件发送成功但数据库存储报错(Invalid syntax for time type)
问题分析
报错ERROR: Invalid syntax for time type: "avipacich"说明数据库插入时,试图将字符串值写入时间类型字段,但你的Messange模型中并没有定义时间字段,核心原因是数据库表结构和Django模型不同步——大概率是之前模型存在时间字段(比如created_at),后来删除但未同步数据库,导致插入数据时数据库期望接收时间值,却收到了字符串内容。
解决步骤
方案1:通过Django迁移同步模型与数据库
- 先备份数据库数据(避免数据丢失)
- 找到对应app下的
migrations目录,删除除__init__.py外的所有迁移文件 - 运行命令生成新的迁移文件:
python manage.py makemigrations - 应用迁移同步数据库结构:
如果是首次创建该模型的迁移,可添加python manage.py migrate--fake-initial参数避免冲突:python manage.py migrate --fake-initial
方案2:手动修正数据库表结构
直接登录数据库(以PostgreSQL/MySQL为例),执行SQL语句查看并修改service_messange表:
- 查看表字段结构:
-- PostgreSQL示例 SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'service_messange'; -- MySQL示例 DESCRIBE service_messange; - 删除模型中不存在的时间类型字段(比如名为
created_at的datetime字段):ALTER TABLE service_messange DROP COLUMN 多余的时间字段名;
额外优化建议
- 修正模型拼写错误:
Messange改为Message,避免后续混淆 - 修复
__str__方法的f-string语法错误:def __str__(self): return f"{self.body}" # 原代码是f'(self.body)',缺少大括号,无法正确显示内容
内容的提问来源于stack exchange,提问作者Eva Smirnova
相关产品推荐
相关产品推荐

