【发布时间】:2017-02-19 03:53:57
【问题描述】:
我有一个带有 foo 对象的 MongoDB 数据库。我想记录它们被添加到数据库的时间。为此,我的方法是存储一个时间,将foo 添加到数据库并设置开始时间。当我从数据库中获取foo 时,开始时间属性应该与我添加它的时间一致。
以下是我的测试,它反映了这一点。这些函数并不是非常重要,因为它们本质上是 db.collection.insert 或 db.collection.find_one 调用。
def test_set_foo_start_time(self):
import datetime
t = datetime.datetime.utcnow()
foo_id = "42"
print("\nAdding {0} to the database.".format(t))
add_foo_to_database(foo_id)
self.assertIsNotNone(get_foo_from_database(foo_id))
set_foo_start_time(foo_id, t)
time = get_foo_from_database(foo_id)['start_time']
print("Extracting {0} from the database.".format(time))
self.assertEqual(t, time)
当我运行测试时,我惊讶地发现它失败了:
test_set_foo_start_time (test_foo_misc.FooMiscellanyTestCase) ...
Adding 2016-10-10 17:01:16.559332 to the database.
Extracting 2016-10-10 17:01:16.559000+00:00 from the database.
FAIL
断言错误在哪里:
Traceback (most recent call last):
File "/Users/erip/Code/proj/tests/test_foo_misc.py", line 336, in test_set_foo_start_time
self.assertEqual(t, time)
AssertionError: datet[36 chars], 559332) != datet[36 chars], 559000, tzinfo=<bson.tz_util.FixedOffset obj[15 chars]240>)
为什么存储和提取的时间不同?我可以添加一个增量来检查时间范围,但我更愿意存储确切的时间。如何修复我的测试以解决这些微秒差异?
【问题讨论】:
标签: python python-3.x mongodb datetime pymongo