我有以下情况:
在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')
答案 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)