Python中SQLAlchemy往MySQL存入日期字符串'2019/07/01'时,为什么总是出现警告Warning: (1292, "Truncated incorrect DOUBLE value: '2019/07/01'")?

date_str = datetime.utcnow().strftime('%Y/%m/%d')

可以存,但是总是被警告:

Warning: (1292, "Truncated incorrect DOUBLE value: '2019/07/01'") cursor.execute(statement, parameters)


Python中SQLAlchemy往MySQL存入日期字符串'2019/07/01'时,为什么总是出现警告Warning: (1292, "Truncated incorrect DOUBLE value: '2019/07/01'")?

4 回复

大家不用回答,楼主自己搜索
1292, "Truncated incorrect DOUBLE value:


这个警告是因为SQLAlchemy尝试将字符串'2019/07/01'直接作为数值(DOUBLE)处理,而不是日期。根本原因是你的模型字段定义为了NumericFloat类型,而不是DateDateTime类型。

检查你的模型定义,应该是类似这样:

from sqlalchemy import Column, Date
from sqlalchemy.dialects.mysql import DATE

class YourModel(Base):
    __tablename__ = 'your_table'
    
    # 错误:使用Numeric或Float类型
    # date_column = Column(Numeric)  
    
    # 正确:使用Date类型
    date_column = Column(Date)  
    
    # 或者明确使用MySQL的DATE类型
    # date_column = Column(DATE)

如果你确实需要存储日期字符串,确保:

  1. 数据库表字段是DATE类型
  2. 模型字段定义为DateDateTime类型
  3. 传入的是Python的date对象或能被解析的日期字符串

正确示例:

from datetime import date

# 方法1:使用date对象
obj.date_column = date(2019, 7, 1)

# 方法2:使用字符串(SQLAlchemy会自动转换)
obj.date_column = '2019-07-01'  # 注意:要用YYYY-MM-DD格式

总结:把模型字段类型从Numeric改成Date。

看见这个我就想笑了。

回到顶部