news 2026/7/8 6:25:39

飞书多维表格自动备份与清空

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
飞书多维表格自动备份与清空

读取 A 表的全部记录 → 逐批写入 B 表 → 清空 A 表

#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 飞书多维表格 通用备份清空工具 功能:将源表全部记录复制到目标表,然后清空源表 只需配置下方的 APP 凭证和表格 ID 即可运行 """ import time import requests # ============================================================ # 飞书配置(请改为你自己的信息) # ============================================================ FEISHU_APP_ID = "cli_xxxxxxxxxxxxx" # 替换为你的 App ID FEISHU_APP_SECRET = "your_app_secret" # 替换为你的 App Secret APP_TOKEN = "YOUR_APP_TOKEN" # 多维表格的 app_token SOURCE_TABLE_ID = "tblxxxxxxxxxxxxx" # 源表(将被复制并清空) TARGET_TABLE_ID = "tblyyyyyyyyyyyyy" # 目标表(备份目的地) # ============================================================ # 飞书 API 封装 # ============================================================ class FeishuBitable: def __init__(self, app_id, app_secret): self.app_id = app_id self.app_secret = app_secret self._token = None self._token_expire = 0 def _get_token(self): if self._token and time.time() < self._token_expire: return self._token url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" resp = requests.post(url, json={"app_id": self.app_id, "app_secret": self.app_secret}, timeout=15) if resp.status_code != 200: raise Exception(f"获取 token 失败,HTTP {resp.status_code}") result = resp.json() if result.get("code") != 0: raise Exception(f"获取 token 失败: {result}") self._token = result["tenant_access_token"] self._token_expire = time.time() + 7000 print("已获取 tenant_access_token") return self._token def get_all_records(self, table_id): """获取表中所有记录,返回原始 fields 字典列表(可直接用于创建)""" token = self._get_token() records = [] page_token = None while True: url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{table_id}/records/search" headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} body = {"page_size": 500} if page_token: body["page_token"] = page_token resp = requests.post(url, headers=headers, json=body, timeout=30) result = resp.json() if result.get("code") != 0: raise Exception(f"查询记录失败: {result}") data = result.get("data", {}) for item in data.get("items", []): records.append(item.get("fields", {})) if not data.get("has_more"): break page_token = data.get("page_token") print(f"从源表读取到 {len(records)} 条记录") return records def batch_create(self, table_id, records): """批量写入记录,records 为 fields 字典列表""" if not records: return token = self._get_token() url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{table_id}/records/batch_create" headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} # 一次最多创建 500 条,这里按 500 分批 for i in range(0, len(records), 500): batch = records[i:i+500] body = {"records": [{"fields": rec} for rec in batch]} resp = requests.post(url, headers=headers, json=body, timeout=60) result = resp.json() if result.get("code") != 0: raise Exception(f"批量写入失败: {result}") print(f" 已写入 {min(i+500, len(records))}/{len(records)} 条") print(f"成功备份全部 {len(records)} 条记录到目标表") def delete_all_records(self, table_id): """删除表中所有记录""" token = self._get_token() # 第一步:获取所有记录 ID record_ids = [] page_token = None while True: url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{table_id}/records/search" headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} body = {"page_size": 500} if page_token: body["page_token"] = page_token resp = requests.post(url, headers=headers, json=body, timeout=30) result = resp.json() if result.get("code") != 0: raise Exception(f"查询记录ID失败: {result}") data = result.get("data", {}) for item in data.get("items", []): record_ids.append(item["record_id"]) if not data.get("has_more"): break page_token = data.get("page_token") if not record_ids: print("源表已是空表,无需删除") return print(f"📋 共 {len(record_ids)} 条待删除") # 第二步:调用 batch_delete 删除 for i in range(0, len(record_ids), 500): batch = record_ids[i:i+500] del_url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{table_id}/records/batch_delete" headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} payload = {"records": batch} resp = requests.post(del_url, headers=headers, json=payload, timeout=30) result = resp.json() if result.get("code") != 0: raise Exception(f"删除失败: {result}") print(f" 已删除 {min(i+500, len(record_ids))}/{len(record_ids)} 条") print("源表已清空") # ============================================================ # 主流程:备份 + 清空 # ============================================================ def backup_and_clear(): print("=" * 50) print("开始执行:源表 → 目标表 备份 & 源表清空") feishu = FeishuBitable(FEISHU_APP_ID, FEISHU_APP_SECRET) # 1. 读取源表所有记录 records = feishu.get_all_records(SOURCE_TABLE_ID) if not records: print("源表无数据,跳过备份步骤") else: # 2. 写入目标表 feishu.batch_create(TARGET_TABLE_ID, records) # 3. 清空源表 feishu.delete_all_records(SOURCE_TABLE_ID) print("=" * 50) print("任务完成!") if __name__ == "__main__": backup_and_clear()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 6:24:17

从CBD到CID看杭州上城,未来十年AI+产业园区的样板间

导语&#xff1a; 熊彼特在《经济发展理论》中写过一个判断&#xff1a;经济发展不是外部力量推动的&#xff0c;而是从内部自行发生的结构性重组&#xff0c;他把这叫做“创造性破坏”&#xff0c;即旧范式不断被新范式替代的过程。 如果以这个视角来审视当下中国城市核心区的…

作者头像 李华
网站建设 2026/7/8 6:22:53

性能超过 GLM-5.1,混元 Hy3 两周限免!CodeBuddy 全系产品支持!

腾讯混元团队在昨天(7月6日)发布了 Hy3 模型的正式版&#xff08;去掉了之前的 preview 字样&#xff09;&#xff0c;官方盲测数据表现优于 GLM-5.1。在内部组织的 270 位专家基于真实工作的模型盲测中&#xff0c;Hy3&#xff08;均分 2.67 / 4&#xff09;展现出优于 GLM5.1…

作者头像 李华
网站建设 2026/7/8 6:21:36

50、<简单>数字方阵-对角线-2

#include <iostream> #include <iomanip> using namespace std;int main() {int N;cout << "请输入方阵阶数N(0<N<10)&#xff1a;";cin >> N;// i为行&#xff0c;j为列for (int i 0; i < N; i){for (int j 0; j < N; j){// …

作者头像 李华
网站建设 2026/7/8 6:21:21

fre:ac音频转换器:一站式解决所有音频格式转换需求

fre:ac音频转换器&#xff1a;一站式解决所有音频格式转换需求 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac 在数字音频处理领域&#xff0c;格式转换是每位用户都会遇到的基础需求。无论是音乐爱好者…

作者头像 李华
网站建设 2026/7/8 6:20:24

瑞芯微RV1126B开发板(EASY-EAI-PI2) 人体关键点识别

1. 人体关键点识别简介 人体关键点识别是一种基于深度学习的对人进行检测定位与姿势估计的模型&#xff0c;广泛应用于体育分析、动物行为监测和机器人等领域&#xff0c;帮助机器实时解读物理动作。本算法具有运行效率高、实时性强的特点。 本人员检测算法在数据集表现如下所…

作者头像 李华
网站建设 2026/7/8 6:20:07

B站视频秒变AI知识库:免费插件实现高效技术学习

&#x1f680; 30款热门AI模型一站整合&#xff0c;DeepSeek/GLM/Qwen 随心用&#xff0c;限时 5 折。 &#x1f449; 点击领海量免费额度 你是不是也有这样的经历&#xff1a;B站收藏夹里塞满了各种教程、技术分享、科普视频&#xff0c;但真正需要的时候却找不到&#xff…

作者头像 李华