python - Flask+PyMongo 的 JSON 解码器
问题描述
我有使用 MongoDB 的 Flask 应用程序。我在编码 ObjectId、datetime 和 date 对象时遇到了问题,但是用这个https://stackoverflow.com/a/51773611/9472066答案解决了它们 - 自定义编码器有效。但是,我不知道如何为 PyMongo 编写解码器:我如何知道字符串是 ObjectId 还是 datetime 或其他什么?我是否必须在解码器方法中手动检查格式,然后调用适当的构造函数?或者有没有更智能、更自动化的方法?
解决方案
我强烈建议您使用本机 python 类型,因为 pymongo 将在创建适当类型方面完成所有繁重的工作。
认为 MongoDB 是一个 JSON 数据库是错误的,而认为必须使用 JSON 才能将数据输入和输出是一个更大的错误。
如果您真的想这样做,请尝试该bson.json_util
模块:
import pymongo
import bson.json_util
db = pymongo.MongoClient()["mydatabase"]
db.mycollection.insert_one({'a': 'a'})
json_str = bson.json_util.dumps(db.mycollection.find_one({'a': 'a'}))
json_dict = json.loads(json_str)
json_dict['a'] = 'b'
json_str = json.dumps(json_dict)
db.newcollection.insert_one(bson.json_util.loads(json_str))
print(list(db.newcollection.find({})))
但我更愿意在本地执行此操作:
db.mycollection.insert_one({'a': 'a'})
record = db.mycollection.find_one({'a': 'a'})
record['a'] = 'b'
db.newcollection.insert_one(record)
print(list(db.newcollection.find({})))
推荐阅读
- android - FileReader FileError 错误代码 1 NOT_FOUND_ERR(误导性)与 Android 上的 Cordova 插件 cordova-plugin-file 和 cordova-plugin-media-capture
- javascript - 为什么控制台会抛出“无法读取未定义的属性‘未定义’”?
- python - 每次在不同机器上的 numpy 中生成相同的随机矩阵
- css - 虽然我可以编辑字体颜色,但我无法编辑字体系列
- reactjs - MUI 可滑动抽屉,但让某些部分始终可见
- python - 卡尔曼滤波器 2d 与 pykalman
- c# - 您是否应该对抽象类的构造函数进行单元测试,如果是,如何?
- android - 带边框的毕加索圆形变换
- amazon-web-services - AWS Personalize:增量更新
- python - Pyinstaller App 在其他电脑上被标记为木马