如何不使用类合并两个Python文件并整合为单个可运行文件
回答
完全可以实现两个需求:既可以不使用类完成原有全部功能,也可以将两个分离的文件合并为单个Python文件直接运行。
可行性说明
原代码中的DBClient类仅做了MongoDB连接初始化和两个操作方法的封装,没有用到必须依赖类特性才能实现的逻辑,完全可以通过全局变量+普通函数的写法实现完全一致的效果。
合并后的单文件无类实现代码
直接将以下代码保存为.py文件,安装好pymongo、flask、bson相关依赖后即可直接运行:
from bson import json_util from pymongo import MongoClient from flask import Flask, request, jsonify import json # 初始化MongoDB连接,替代原类构造函数中的连接逻辑 _mongo_client = MongoClient('localhost', 27017) db_collection = _mongo_client.requests.requests_data def get_data(request_id, email): req_record = db_collection.find_one({"requestId": request_id, "email": email}) if req_record: req_record = json.loads(json_util.dumps(req_record)) # 过滤值为Failed的字段 for k, v in list(req_record.items()): if v == 'Failed': del req_record[k] return req_record def update_status(request_id, tc, old_status, new_status): db_collection.update_one( {"requestId": request_id, tc: old_status}, {"$set": {tc: new_status}} ) # 初始化Flask应用 app = Flask(__name__) @app.route('/fetch_data', methods=['GET']) def fetch_data(): request_id = request.args.get('requestId') email = request.args.get('email') if not request_id or not email: return jsonify({"status": 400, "data": [], "info": "Invalid email or requestId"}) resp_data = get_data(request_id, email) return jsonify({"status": 200, "data": resp_data, "info": "OK"}) if __name__ == '__main__': app.run()
逻辑一致性说明
- 上述代码和原双文件+类实现的功能完全对齐,没有删减任何原有逻辑
- MongoDB连接在Flask启动时初始化一次,后续所有请求复用该连接,和原类实例化后持有连接的行为完全一致,不会出现重复创建连接的性能问题
- 原代码中定义的
update_status方法也完整保留,后续需要调用时直接传入对应参数即可
内容的提问来源于stack exchange,提问作者Sagar G
相关产品推荐
相关产品推荐

