为什么我无法从Django orm中的数据库中检索日期时间值?

时间:2019-10-16 07:04:08

标签: python django python-3.x

我有以下情况:

在models.py

def Lab(models.Model):
    test_id=models.IntegerField()
    test_name=models.CharField(max_length=10)
    test_date=models.DateField()

我将数据库迁移到sqlite3并从外部Excel工作表填充它,现在我尝试执行以下操作:

Lab.objects.values_list('test_date',flat=True)

此调用引发以下错误

  

*** ValueError:以10为底的int()无效文字:b'09 00:00:00.000000'

我可以简单地要求其他值,没有问题,但不能要求test_date值,这可能是什么错误?

更新

如前所述,我使用以下代码段手动填写了表格:

df['test_date'] = df['test_date'].astype(str)
df['test_date'] = df['test_date'].replace('0', np.nan)
str_date = df['test_date'].str.zfill(8)
df['test_date'] = pd.to_datetime(str_date,  yearfirst=True, format='%Y%m%d')`

然后我以

的形式将其填充到数据库中
engine = create_engine('sqlite:///db.sqlite3', echo=False)
df.to_sql('Lab', con=engine, index=False, if_exists='append')

2 个答案:

答案 0 :(得分:2)

问题在于,Pandas已将您的test_date列插入为日期时间,而不是原始日期-因此,值的末尾还有额外的数据,Django不知道该怎么做。 >

我距离熊猫专家还很远,但是我相信,如果您将test_date字段明确指定为Date:

from sqlalchemy.types import Date
df.to_sql('Lab', con=engine, dtype={"test_date": Date()}, if_exists='append')

答案 1 :(得分:0)

如果要应用某些过滤器,请更新查询:

Lab.objects.filter(test_id=1).values_list('test_date',flat=True)

或者如果您需要所有数据:

Lab.objects.all().values_list('test_date',flat=True)