python - pytest 不会将日期字段转换为 Django 中的 datetime.date 对象

标签 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

当我使用 Django 的测试运行程序运行测试时:python manage.py test,我得到了预期的结果:

RESULTS:  <QuerySet [{'created_count': 14, 'sd': datetime.date(2017, 2, 24)}]>

但是当我使用 pytest -s 时,我得到:

RESULTS:  <QuerySet [{'created_count': 14, 'sd': u'2017-02-24'}]>

为什么 pytest 不像 Django 的测试运行器那样转换日期?

最佳答案

当我对 postgresql 数据库进行查询时,我得到了很好的 datetime.date() 行为,但是运行时的 u'2017-02-24' 行为针对 SQLLite 数据库后端,所以我预计问题是无论出于何种原因,当您使用 pytest 运行时,您使用的数据库后端与您从 python manage.py 运行时不同测试

更新(经过一些研究)

SQLLite does not have native 日期时间数据类型,并且可以使用 TEXT、REAL 或 INTEGER 数据类型存储日期时间值。然后你使用 date functions根据需要显示您的日期。

特别是 date() SQLLite 函数返回一个字符串,这实际上等同于 strftime('%Y-%m-%d' , ...)。所以我希望提供绑定(bind)的 python 库也能返回一个字符串。

但是普通 SQL/postgresql does have native date time types . date() 函数返回一个日期对象。因此,处理这些数据库类型的 python 库也将返回一个 datetime.date 对象是有道理的。

关于python - pytest 不会将日期字段转换为 Django 中的 datetime.date 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42665416/

相关文章:

python - 在不保存图像的情况下使用 matplotlib 时删除图像周围的白色边框

python - Django 或 Python 的自动垃圾邮件过滤或标记?

python - 模型内部的 IntegrityError.Django 中的 DoesNotExist 异常

python - 使用日志记录时拆解中的 Pytest 错误

python - py.test fixture 上的补丁

python - 如何用 Python 将变量写成二进制数据?

python - 如何使用 spaCy 获取依赖树?

django - 如何避免django项目中出现重复模型?

python - django 1.10 中的自定义设置和 wsgi 给我错误

Pytest 忽略 pytest.ini 文件