import pandas as pd
from pymongo import MongoClient
from urllib.parse import quote_plus

def csv_to_mongodb_safe(csv_file_path, host, port, username, password, 
                       db_name, collection_name, auth_source='admin'):
    """
    安全的CSV导入MongoDB(处理特殊字符)
    """
    try:
        # 读取CSV文件
        df = pd.read_csv(csv_file_path)
        print(f"成功读取CSV文件,共 {len(df)} 行数据")
        
        # 对用户名和密码进行URL编码
        encoded_username = quote_plus(username)
        encoded_password = quote_plus(password)
        
        # 构建连接字符串
        mongodb_uri = f"mongodb://{encoded_username}:{encoded_password}@{host}:{port}/?authSource={auth_source}"
        
        # 连接MongoDB
        client = MongoClient(mongodb_uri)
        
        # 测试连接
        client.admin.command('ping')
        print("成功连接到MongoDB")
        
        # 选择数据库和集合
        db = client[db_name]
        collection = db[collection_name]
        
        # 转换数据并插入
        data = df.to_dict('records')
        if data:
            result = collection.insert_many(data)
            print(f"成功导入 {len(result.inserted_ids)} 条记录")
            
        client.close()
        return True
        
    except Exception as e:
        print(f"操作失败: {e}")
        return False

# 使用示例
if __name__ == "__main__":
    success = csv_to_mongodb_safe(
        csv_file_path="/tmp/00533_数据库导入.csv",
        host="",
        port=27017,
        username="",      # 包含特殊字符的用户名
        password="",      # 包含特殊字符的密码
        db_name="",
        collection_name="",
        auth_source="admin"
    )
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐