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

How to retrieve awareness timezone datetime objects with PyMongo

我遇到了 PyMongo 3.9 和 datetime 对象的问题。在我的 MongoDB 4.x 服务器中,我有一个这样的文档:

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

如您所见,start_date 处于 UTC 时区,但是当我使用 PyMongo:

检索文档时,时区丢失了
db.get_collection('my_collection').find_one({'_id': {'$eq': 2}})

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

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

但这意味着要依靠开发人员的记忆来记住将此选项添加到每个查询中。所以我的问题是:有没有办法配置 MongoDB、PyMongo 或任何始终 return 感知时区日期时间对象?

非常感谢!

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

client = pymongo.MongoClient(tz_aware=True)