You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Simple_Salesforce快速删除Salesforce中的Contact记录

更快的批量删除Salesforce记录方案

你的问题核心是单条记录逐个删除带来的频繁网络请求开销——每次sf.Contact.delete(i)都会发起一次独立API调用,5000条记录就对应5000次请求,这是耗时的主要根源。以下是两种高效优化方案:

方案一:使用Simple-Salesforce的Bulk API批量删除

Simple-Salesforce原生支持Salesforce Bulk API,它能将多条删除请求打包成批次提交,大幅减少网络交互次数,速度能提升几十倍。

优化后的代码

from simple_salesforce import Salesforce
from tqdm import tqdm

username="#####"
password="#####"
security_token="######"
domain="test"

sf = Salesforce(username=username,password=password, security_token=security_token,domain=domain)

#### QUERY #### 
results=sf.query_all("""
    Select id FROM Contact where CreatedById='########' and RecordTypeId = '#######'
    """)

# 直接提取ID列表,跳过不必要的DataFrame创建
record_ids = [rec['Id'] for rec in results['records']]

# 使用Bulk API批量删除,批次大小设为Salesforce允许的最大值1000
if record_ids:
    # 跟踪批量任务进度
    job = sf.bulk.Contact.delete(record_ids, batch_size=1000, use_serial=True)
    # 检查任务结果,定位删除失败的记录(可选)
    for batch in tqdm(job):
        if not batch['success']:
            print(f"删除失败的记录ID: {batch['id']},错误信息: {batch['errors']}")

print('Contacts deleted')

关键优化点

  • 省去DataFrame转换:直接从查询结果提取ID,减少内存占用和数据转换步骤
  • 批量请求合并:5000条记录只需5次API请求,彻底降低网络延迟
  • 可选错误处理:快速定位删除失败的记录,方便后续补操作

方案二:使用Salesforce REST Composite API(适合中小批量)

如果你的待删记录在200条以内,也可以用Composite API的集合删除操作,一次请求最多处理200条,适合快速处理中等规模任务。

示例代码

import json

# 按200条为一组拆分ID列表
for i in range(0, len(record_ids), 200):
    batch_ids = record_ids[i:i+200]
    # 构造Composite请求体
    composite_request = {
        "allOrNone": False,
        "compositeRequest": [
            {
                "method": "DELETE",
                "url": f"/services/data/v59.0/sobjects/Contact/{record_id}",
                "referenceId": f"ref_{record_id}"
            } for record_id in batch_ids
        ]
    }
    # 发送批量删除请求
    response = sf.restful('composite', method='POST', data=json.dumps(composite_request))
    # 处理响应结果(可选)
    for result in response['compositeResponse']:
        if result['httpStatusCode'] != 204:
            print(f"删除失败ID: {result['referenceId'].split('_')[1]},错误: {result['body']}")

注意事项

  • Composite API单请求最多支持200条操作,适合中小批量场景
  • allOrNone设为False时,部分记录删除失败不会影响其他记录的处理

额外建议

  • 沙盒环境API速率限制比生产环境宽松,但也不要一次性提交过多批次,避免触发临时限流
  • 若待删记录超过10万条,可分多个批次异步执行Bulk API任务
  • 查询时只请求Id字段即可,减少不必要的数据传输量

内容的提问来源于stack exchange,提问作者user15915737

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:05:21