如何将字符串传入函数使其作为内部变量/属性?MongoDB转DataFrame场景
动态从MongoDB导入供应商数据到Pandas DataFrame
这问题我熟!你只需要利用MongoDB客户端支持字符串索引访问集合的特性,就能轻松实现动态获取集合的需求。不用再写重复的硬编码代码,直接封装成一个函数就搞定了。
实现思路
核心逻辑很简单:通过传入的供应商名称动态拼接集合名,用字典式索引(而非点符号)获取MongoDB集合,最后将集合数据转换为Pandas DataFrame。
完整代码示例
from pymongo import MongoClient import pandas as pd # 建议提前初始化MongoDB客户端,避免每次调用函数都新建连接(更高效) client = MongoClient() db = client["supplier_static_database"] def get_supplier_properties_df(supplier_name): # 动态拼接集合名称:供应商名 + "_properties" collection_name = f"{supplier_name}_properties" # 可选:检查集合是否存在,避免拼写错误导致的无意义报错 if collection_name not in db.list_collection_names(): raise ValueError(f"集合 {collection_name} 不存在于数据库中!") # 获取集合数据并转换为DataFrame return pd.DataFrame(list(db[collection_name].find()))
使用示例
调用函数时只需要传入供应商名称字符串即可:
# 获取taap供应商的数据 taap_df = get_supplier_properties_df("taap") # 获取hotelbeds供应商的数据 hotelbeds_df = get_supplier_properties_df("hotelbeds") # 获取ean供应商的数据 ean_df = get_supplier_properties_df("ean")
为什么这样可行?
平时我们用db.taap_properties访问集合,本质上和db["taap_properties"]是完全等价的。区别在于:
- 点符号访问是静态属性调用,只能写死集合名
- 字符串索引是动态键访问,允许我们通过变量拼接的方式生成集合名
额外优化说明
我加了一个可选的集合存在性检查,如果传入的供应商名对应的集合不存在,会直接抛出明确的错误,方便你快速排查问题。如果不需要这个校验逻辑,可以直接去掉那几行代码。
内容的提问来源于stack exchange,提问作者KugelBlitz
相关产品推荐
相关产品推荐

