You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义函数间传递MongoDB的mycol触发NameError未定义错误

解决函数间传递MongoDB集合对象导致的NameError问题

报错NameError: name 'mycol' is not defined的核心原因是change_db_data函数内部未获取到mycol集合对象——主函数中虽通过init_db成功获取了mycol,但调用change_db_data时并未将该对象传入函数,导致函数无法识别这个变量。

标准解决方案:通过参数传递集合对象

步骤1:修改change_db_data函数定义,添加mycol参数

更新Iser_upd_qur_del_function.py中的函数签名,将mycol作为第一个参数传入:

import pymongo
import datetime
import json
def init_db(ip, db, coll):
    myclient = pymongo.MongoClient('mongodb://' + ip + '/')
    mydb = myclient[db]
    mycol = mydb[coll]

    return mydb, mycol


def change_db_data(mycol, myquery_json, newvalues_json, one_or_many_bool):
    
    if one_or_many_bool == True:
        x = mycol.update_many(myquery_json, newvalues_json)
    else:
        x = mycol.update_one(myquery_json, newvalues_json)
    return x

步骤2:修改主函数调用,传入mycol对象

在main.py中调用change_db_data时,把获取到的mycol作为第一个参数传入:

from Iser_upd_qur_del_function import *

ip_input = input("Enter the ip: ")
exist_DB_name = input("Enter exist DB name: ")
exist_coll_name = input("Enter exist collection name: ")
mydb, mycol  = init_db(ip_input, exist_DB_name, exist_coll_name)

myquery_str = input("Enter ur query: ")
update_one_or_many = input("U are update one or many values? (ex:1 for many , 0 for one): ")
newvalues_str = input("Enter new values: ")

one_or_many_bool = bool(int(update_one_or_many))

myquery_json =json.loads(myquery_str)
newvalues_json =json.loads(newvalues_str)
# 传入mycol参数
x = change_db_data(mycol, myquery_json, newvalues_json, one_or_many_bool)
print(x)
print(x.modified_count, "documents updated.")

可选方案(不推荐):使用全局变量

如果不想通过参数传递,可在init_db函数中将mycol设为全局变量,但这种方式会降低代码可维护性和复用性,仅适合简单脚本:
在Iser_upd_qur_del_function.py中修改init_db:

def init_db(ip, db, coll):
    global mycol
    myclient = pymongo.MongoClient('mongodb://' + ip + '/')
    mydb = myclient[db]
    mycol = mydb[coll]

    return mydb, mycol

此方案无需修改change_db_data的参数和主函数调用,但不建议在复杂项目中使用。

内容的提问来源于stack exchange,提问作者j ton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:45:32