如何使用 PyMongo 检索感知时区日期时间对象

pak*_*ill 3 datetime mongodb python-3.x pymongo-3.x

我面临 PyMongo 3.9 和日期时间对象的问题。在我的 MongoDB 4.x 服务器中,我有一个像这样的文档:

{
    "_id" : 2,
    "status" : "Running",
    "start_date" : ISODate("2020-11-19T05:03:54.576Z")
}
Run Code Online (Sandbox Code Playgroud)

如您所见,start_date位于 UTC 时区,但是当我使用 PyMongo 检索文档时,时区丢失了:

db.get_collection('my_collection').find_one({'_id': {'$eq': 2}})
Run Code Online (Sandbox Code Playgroud)

我在这里读到https://pymongo.readthedocs.io/en/stable/api/bson/codec_options.html Mongo默认返回一个天真的时区日期时间,为了获得一个意识时区日期时间,我应该添加这个选项到查询:

opts=CodecOptions(tz_aware=True)
db.get_collection('my_collection', codec_options=opts).find_one({'_id': {'$eq': 99}})
Run Code Online (Sandbox Code Playgroud)

但这意味着依赖开发人员的记忆来记住将此选项添加到每个查询中。所以我的问题是:有没有什么方法可以配置 MongoDB、PyMongo 或其他任何东西来始终返回感知时区日期时间对象?

太感谢了!

Bel*_*ter 8

您可以使用参数在MongoClienttz_aware级别执行此操作。

client = pymongo.MongoClient(tz_aware=True)
Run Code Online (Sandbox Code Playgroud)