Python 为什么可以';我不能用Django orm从数据库中检索日期时间值吗?

Python 为什么可以';我不能用Django orm从数据库中检索日期时间值吗?,python,django,python-3.x,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() 我将DB迁移到sqlite3,并从外部Excel工作表中填充它,现在我尝试执行以下操作: Lab.objects.values_list('test_date',flat=True)

我有以下情况:

在models.py中

def Lab(models.Model):
    test_id=models.IntegerField()
    test_name=models.CharField(max_length=10)
    test_date=models.DateField()
我将DB迁移到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')

如果要应用某些筛选器,请更新查询:

Lab.objects.filter(test_id=1).values_list('test_date',flat=True)
或者,如果您需要所有数据:

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

问题是Pandas将您的
test\u date
列作为日期时间而不是普通日期插入,因此在值的末尾有额外的数据,Django不知道如何处理

我不是熊猫方面的专家,但我相信如果您明确指定test_date字段为日期,它会起作用:

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

您应该展示如何填充数据库。显然,您已将该列作为字符串而不是日期导入。我已将pandas dataframe中的数据格式化为datetime,然后将其与示例数据一起放入DBShow导入代码中。Sqlite不验证数据类型,因此完全可以将字符串插入日期列,这显然是您所做的。请参阅更新的问题我尝试了Lab.objects.all().values\u list('test\u date',flat=true),但它似乎不起作用。我也有同样的失败。顺便说一句,我需要检索test_date中的所有列值谢谢,你的注释是对的,当我使用pandas编写to_sql时,它还写了不应该在日期字段中的时间。我刚把它取下来,它就起作用了。我也测试了你的方法,它也是有效的。感谢您的精彩评论:)