Python DateTime的数据错误?
我有一个Django模型(ReportCache),它将报告存储在SQL表中。其中一个字段是django.db.models.DateTimeField,用于存储上次更新报告的时间 出于某种原因,我得到了一个DataError:当试图将datetime保存到类型字符变量(20)时,值太长。datetime是由datetime.datetime.now()生成的,我尝试过使用和不使用django.utils.timezone.make_aware()都没有影响 完全回溯正在进行中Python DateTime的数据错误?,python,django,datetime,django-models,traceback,Python,Django,Datetime,Django Models,Traceback,我有一个Django模型(ReportCache),它将报告存储在SQL表中。其中一个字段是django.db.models.DateTimeField,用于存储上次更新报告的时间 出于某种原因,我得到了一个DataError:当试图将datetime保存到类型字符变量(20)时,值太长。datetime是由datetime.datetime.now()生成的,我尝试过使用和不使用django.utils.timezone.make_aware()都没有影响 完全回溯正在进行中 有没有关于我的日
有没有关于我的日期随机过长的建议?问题似乎不在于日期字段,而在于ReportKey字符串字段 如前所述,在Python中直接调用双下划线方法(如
foo.\uu str\uu()
)不是惯用方法。您应该调用内置函数:str(foo)
。更好的方法是使用字符串插值:
ReportKey = "DetailedReport.{}.{}.{}".format(year, month, clientId)
date字段是以某种方式在数据库中创建为varchar列的,或者错误与另一个字段有关。回溯显示LastUpdate=datetime.datetime.now(),这是我的代码中有问题的一行,显然是多行语句的第一行,不是错误的原因;将变量设置为日期不会导致数据库插入。请显示该行的上下文:如果不太长,可能是整个runDetailedReport函数。因此我猜问题在于ReportKey字段,因为它至少有22个字符(取决于clientId的长度。另外请注意,您不应该直接调用
foo.\uu str\uu()
:dostr(foo)
或者更好地使用字符串插值。将ReportKey的长度更改为64已经解决了这个问题。您可以将其作为答案提交给我,这样我就可以接受它了。另外,我为什么要使用str()而不是str()?