【问题标题】:DataError for a DateTime?日期时间的数据错误?
【发布时间】:2014-10-31 12:29:14
【问题描述】:

我有一个将报告存储在 SQL 表中的 Django 模型 (ReportCache)。其中一个字段是 django.db.models.DateTimeField,用于存储上次更新报告的时间。

由于某种原因,我在尝试向它们保存日期时间时收到 DataError: value too long for type character varying(20)。 datetime是由datetime.datetime.now()生成的,我试过有无django.utils.timezone.make_aware(),都没有影响。

完整的回溯位于https://gist.github.com/cyberjacob/2f1e61f83a6fbd5792b8

关于我的日期随机太长的任何建议?

【问题讨论】:

  • 要么日期字段以某种方式创建为数据库中的 varchar 列,要么错误完全与另一个字段有关。
  • 回溯显示 LastUpdate=datetime.datetime.now(),是我代码中的违规行
  • 这显然是多行语句的第一行,并不是错误的原因;将变量设置为日期将不会导致数据库插入。请显示该行的上下文:可能是整个 runDetailedReport 函数,如果它不是太长的话。
  • 所以我猜问题出在 ReportKey 字段上,因为它至少有 22 个字符(取决于 clientId 的长度。另请注意,您应该从不调用foo.__str__() 直接:做str(foo) 甚至更好地使用字符串插值。
  • 将 ReportKey 的长度更改为 64 已解决此问题。您能否将其作为答案提交,以便我接受。另外,为什么我应该使用 str() 而不是 __str__()?

标签: python django datetime django-models traceback


【解决方案1】:

问题似乎不在于日期字段,而在于 ReportKey 字符串字段。

如前所述,在 Python 中直接调用像 foo.__str__() 这样的双下划线方法并不习惯。您应该调用内置函数:str(foo)。更好的是使用字符串插值:

ReportKey = "DetailedReport.{}.{}.{}".format(year, month, clientId)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    相关资源
    最近更新 更多