TypeError:“ObjectId”类型的对象不能使用Flask和MongoDB进行JSON序列化

2024-10-01 22:42:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望将字典插入mongo db并返回

我发现了几个关于这个错误的问题,但都与阅读查询有关。因为我只是插入,不需要解析任何输出,所以我根本不理解这种行为

行为的主要区别在于在这一行输入/输出注释:

db_s41.links.insert_one(new_link_doc)

注释掉行后,对象的返回工作正常。显然,文档没有插入

如果未注释掉,则返回不起作用,抛出错误,但文档仍然正确插入数据库

我正在使用以下代码:

from flask import Flask, redirect, url_for, request, render_template
from pymongo import MongoClient
import os

app = Flask(__name__)

client = MongoClient(
    os.environ['DOCKER_FLASK_MONGODB_DB_1_PORT_27017_TCP_ADDR'],
    27017
)

# Set db object
db_s41 = client.s41

@app.route('/new_link2')
def generate_link(berater="muster_berater", kunde='muster_kunde'):
   
    new_link_doc = {
        'link': 'test',
        'required_documents': [],
        'date_link_generated': 'test',
        'timestamp_link_generated': 'test',
        'berater_link_generated': 'test'
    }

    # insert into database 's41', collection 'links'
    db_s41.links.insert_one(new_link_doc)

    return new_link_doc

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
 

我正在使用以下版本:

Docker版本20.10.1,版本831ebea Mongo 4.4.2 Python 3.6.6 单击7.1.2
烧瓶1.1.2
它是危险的1.1.0
金甲2.11.2 MarkupSafe 1.1.1
pip 10.0.1 pymongo 3.11.2 设置工具39.2.0 Werkzeug 1.0.1
车轮0.31.1

我真的很感激任何想法


Tags: testimport版本appnewdbdoc错误
1条回答
网友
1楼 · 发布于 2024-10-01 22:42:33

将文档插入MongoDB时,如果未指定_id字段,pymongo驱动程序将在插入数据库之前向文档中添加类型为ObjectId_id字段

https://pymongo.readthedocs.io/en/stable/faq.html#writes-and-ids

Flask然后尝试JSON序列化它不知道如何做的字段;因此出现了错误

一个简单的修复方法可以是在返回它之前只pop这个_id;e、 g

# insert into database 's41', collection 'links'
db_s41.links.insert_one(new_link_doc)
new_link_doc.pop('_id')

return new_link_doc

相关问题 更多 >

    热门问题