如何在Python中使用insert_one向mongo_db插入键值到函数中?

0 投票
0 回答
29 浏览
提问于 2025-04-11 23:52

我之前写了一个可以在数据库中插入新文档的函数,但我重新查看了作业要求,发现需要一个可以接收参数的函数。当我按照要求重写代码时,出现了类型错误。

(原来的代码)

    def create():
        
        new_animal = {'animal_id': input('Enter animal_id'), 
  'rec_num': input('Enter rec_num'),
  'age_upon_outcome': input('Enter age_upon_outcome')}
        print(new_animal)
        
        animals_collection = DbTools.db.animals
       
    
        result = animals_collection.insert_one(new_animal)
    
        document_id = result.inserted_id
        print(f"_id of inserted document: {document_id}")
        print(new_animal)

        document_to_find = {'_id': ObjectId(document_id)}
        result = animals_collection.find_one(document_id)
        print("Found :", document_id)
        print(result)

我把代码改成这样,以符合作业的要求:“函数的输入参数将是一组键值对,数据类型要符合MongoDB驱动的插入API调用。”

(Main.py)

import CRUD

   
CRUD


new_animal = {
  'animal_id': input('Enter animal_id'), 
  'rec_num': input('Enter rec_num'),
  'age_upon_outcome': input('Enter age_upon_outcome')}

for key,val in new_animal.items():
    CRUD.DbTools.create(key,val)

(CRUD.py)

    def create(key, value):
        
        new_animal = {key, value}
        print(new_animal)
        
        animals_collection = DbTools.db.animals
       
    
        result = animals_collection.insert_one(new_animal)
    
        document_id = result.inserted_id
        print(f"_id of inserted document: {document_id}")
        print(new_animal)

        document_to_find = {'_id': ObjectId(document_id)}
        result = animals_collection.find_one(document_id)
        print("Found :", document_id)
        print(result)

输出:

Pinged your deployment. You successfully connected to MongoDB!
Enter animal_id111
Enter rec_num222
Enter age_upon_outcome333
{'111', 'animal_id'}
Traceback (most recent call last):
  File "/Users/CS340WS/Main.py", line 28, in <module>
    CRUD.DbTools.create(key,val)
  File "/Users/CS340WS/CRUD.py", line 34, in create
    result = animals_collection.insert_one(new_animal)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/CS340WS/venv/lib/python3.11/site-packages/pymongo/collection.py", line 663, in insert_one
    common.validate_is_document_type("document", document)
  File "/Users/CS340WS/venv/lib/python3.11/site-packages/pymongo/common.py", line 552, in validate_is_document_type
    raise TypeError(
TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping

0 个回答

暂无回答

撰写回答