int*_*lis 7 python django pytest
我有这个用Django编写的简单查询,我想用pytest运行我的测试.
results = (self.base_query
.order_by('service_date')
.extra({'sd': "date(service_date)"})
.values('sd')
.annotate(created_count=Sum('pax_number')))
print 'RESULTS: ', results
Run Code Online (Sandbox Code Playgroud)
当我使用Django的测试运行器运行测试时python manage.py test,我得到了预期的结果:
RESULTS: <QuerySet [{'created_count': 14, 'sd': datetime.date(2017, 2, 24)}]>
Run Code Online (Sandbox Code Playgroud)
但当我这样做时pytest -s,我得到:
RESULTS: <QuerySet [{'created_count': 14, 'sd': u'2017-02-24'}]>
Run Code Online (Sandbox Code Playgroud)
为什么pytest转换日期不像Django的测试运行器?
datetime.date()当我对 postgresql 数据库进行查询时,我得到了很好的行为,但是u'2017-02-24'当我对 SQLLite 数据库后端运行时,我得到了很好的行为,所以我预计问题是,无论出于何种原因,当您运行时,pytest您正在使用与以下数据库不同的数据库后端:当你从 逃跑时python manage.py test。
SQLLite没有本机日期时间数据类型,可以使用 TEXT、REAL 或 INTEGER 数据类型存储日期时间值。然后,您可以使用日期函数来根据需要显示日期。
特别是date()SQLLite 函数返回一个字符串,它实际上相当于strftime('%Y-%m-%d', ...). 所以我希望提供绑定的 python 库也能返回一个字符串。
然而,普通的 SQL/postgresql确实有本机日期时间类型。那里的函数date()返回一个日期对象。因此,处理这些数据库类型的 python 库也会返回一个datetime.date对象,这是有道理的。
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |