小程序
小游戏
企业微信
微信支付
扫描小程序码分享
看文档说,云函数有一个可写层,只有500M,那么如果用云函数下载并处理一个1G的文件,是不是就会爆掉?
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
结合实际情况,可以考虑先count统计出数据量,在分批取回。
也可以考虑通过HTTP API ,用Python下载。
分享自用的python下载数据库代码:
import requests import json import time import datetime import pandas as pd env = "这里是你的环境" # 获得token this_token = requests.get( url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的APPID&secret=你的密码' ).json() # 导出数据 get_data_url = 'https://api.weixin.qq.com/tcb/databasemigrateexport?access_token=' + this_token['access_token'] get_data_param = { "env": env, "file_path": "this_file.csv", "file_type": 2, "query": "const GET = db.collection(\'marker\').field({ _id: true,location: true,machineRoom: true,obdDepartment: true,obdRegion: true,obdGrid: true,classification: true,state: true,obdMaintainer: true,site: true,obdID: true,obdCode: true,obdName: true,parent: true,obdType: true,specs: true,capacity: true,updatedBy: true,updateTime: true,isManualUpdate: true,reportLoss: true,maintenanceExplain: true,changeLog: true,searchIndex: true }).get()" } get_data = requests.post(url=get_data_url, data=json.dumps(get_data_param)).json() if get_data['errmsg'] == 'ok': print('开始导出数据') else: print('错误:导数数据失败') print(get_data) exit() # 获得文件地址 file_url = '' while file_url == '': print('正在导出数据...') get_file_url = 'https://api.weixin.qq.com/tcb/databasemigratequeryinfo?access_token=' + this_token['access_token'] get_file_param = { "env": env, "job_id": get_data['job_id'] } get_file = requests.post(url=get_file_url, data=json.dumps(get_file_param)).json() if get_file['errmsg'] == 'ok': file_url = get_file['file_url'] # 如果文件地址为空,则延时2秒再重新获取 if file_url == '': time.sleep(2) else: print('错误:获得文件地址失败') exit() print('获得文件地址成功') now_time = datetime.datetime.now() str_time = now_time.strftime("%Y年%m月%d日 %H时%M分%S秒") # 格林威治时间转北京时间 def utc_to_bjs(utc): utc_format = "%Y-%m-%dT%H:%M:%S.%fZ" utc_time = datetime.datetime.strptime(utc, utc_format) localtime = utc_time + datetime.timedelta(hours=8) return localtime print("正在下载文件...") df_box = pd.read_csv(file_url, low_memory=False) print("开始处理数据") print("[更新时间]列格式化(格林威治时间转北京时间)") df_box['更新时间'] = df_box['更新时间'].apply(lambda x: '' if pd.isna(x) or pd.isnull(x) else utc_to_bjs(x)) df_box['更新时间'] = pd.to_datetime(df_box['更新时间']) print("正在保存文件...") print("数据量较大,请耐心等待...") with pd.ExcelWriter('明细(' + str_time + ').xlsx') as writer: df_box.to_excel(writer, sheet_name='明细', index=False)
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
结合实际情况,可以考虑先count统计出数据量,在分批取回。
也可以考虑通过HTTP API ,用Python下载。
分享自用的python下载数据库代码:
import requests import json import time import datetime import pandas as pd env = "这里是你的环境" # 获得token this_token = requests.get( url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的APPID&secret=你的密码' ).json() # 导出数据 get_data_url = 'https://api.weixin.qq.com/tcb/databasemigrateexport?access_token=' + this_token['access_token'] get_data_param = { "env": env, "file_path": "this_file.csv", "file_type": 2, "query": "const GET = db.collection(\'marker\').field({ _id: true,location: true,machineRoom: true,obdDepartment: true,obdRegion: true,obdGrid: true,classification: true,state: true,obdMaintainer: true,site: true,obdID: true,obdCode: true,obdName: true,parent: true,obdType: true,specs: true,capacity: true,updatedBy: true,updateTime: true,isManualUpdate: true,reportLoss: true,maintenanceExplain: true,changeLog: true,searchIndex: true }).get()" } get_data = requests.post(url=get_data_url, data=json.dumps(get_data_param)).json() if get_data['errmsg'] == 'ok': print('开始导出数据') else: print('错误:导数数据失败') print(get_data) exit() # 获得文件地址 file_url = '' while file_url == '': print('正在导出数据...') get_file_url = 'https://api.weixin.qq.com/tcb/databasemigratequeryinfo?access_token=' + this_token['access_token'] get_file_param = { "env": env, "job_id": get_data['job_id'] } get_file = requests.post(url=get_file_url, data=json.dumps(get_file_param)).json() if get_file['errmsg'] == 'ok': file_url = get_file['file_url'] # 如果文件地址为空,则延时2秒再重新获取 if file_url == '': time.sleep(2) else: print('错误:获得文件地址失败') exit() print('获得文件地址成功') now_time = datetime.datetime.now() str_time = now_time.strftime("%Y年%m月%d日 %H时%M分%S秒") # 格林威治时间转北京时间 def utc_to_bjs(utc): utc_format = "%Y-%m-%dT%H:%M:%S.%fZ" utc_time = datetime.datetime.strptime(utc, utc_format) localtime = utc_time + datetime.timedelta(hours=8) return localtime print("正在下载文件...") df_box = pd.read_csv(file_url, low_memory=False) print("开始处理数据") print("[更新时间]列格式化(格林威治时间转北京时间)") df_box['更新时间'] = df_box['更新时间'].apply(lambda x: '' if pd.isna(x) or pd.isnull(x) else utc_to_bjs(x)) df_box['更新时间'] = pd.to_datetime(df_box['更新时间']) print("正在保存文件...") print("数据量较大,请耐心等待...") with pd.ExcelWriter('明细(' + str_time + ').xlsx') as writer: df_box.to_excel(writer, sheet_name='明细', index=False)
但用HTTP API,500M理论上也没问题,你试一下。