使用 simple-salesforce 从 salesforce 表中删除表行

car*_*mom 1 python salesforce simple-salesforce

我已成功查询表、提取架构并向(自定义)表添加一行,但无法弄清楚如何通过 API 再次删除该行。以下将列出我想要删除的行:

import config
from simple_salesforce import Salesforce

sf = Salesforce(password=config.PASSWORD, 
                username=config.EMAIL_SANDBOX, 
                organizationId='',
                domain='test')

sf.query("SELECT Id FROM MyTable__c where id = 'a0D2R067009YpAeWAK'")
Run Code Online (Sandbox Code Playgroud)

已经尝试了网络上的各种东西太久了,最有可能的是这样的:

sf.query("delete [SELECT Id FROM MyTable__c where id = 'a0D2R067009YpAeWAK']")
Run Code Online (Sandbox Code Playgroud)

正如这里所描述的,但不幸的是它提出了:

SalesforceMalformedRequest:格式错误的请求https://eu20.salesforce.com/services/data/v38.0/query/?q=delete+%5BSELECT+Id+FROM+MyTable__c+where+id+%3D+%27a0D2R067009YpAeWAK%27%5D。响应内容:[{'message': '意外的令牌:删除', 'errorCode': 'MALFORMED_QUERY'}]

已经尝试过这方面的变体,结果基本相同。有什么想法如何让它发挥作用吗?

Dav*_*eed 6

要删除 中的记录simple_salesforce,您必须调用 sObject 对应的连接属性上的方法。SOQL 查询是只读的,永远无法更新或删除数据,但 Anonymous Apex 可以。

simple_salesforce文档中有一个示例:

sf.Contact.delete('003e0000003GuNXAA0')
Run Code Online (Sandbox Code Playgroud)

如果您想通过 Anonymous Apex 来完成此操作,您可以使用该restful()方法来访问 Tooling API,但这不是执行简单删除操作的“正确”方法,并且会更慢。

sf.restful(
    "tooling/executeAnonymous",
    {"anonymousBody": "delete [SELECT Id FROM Contact WHERE <condition>];"},
)
Run Code Online (Sandbox Code Playgroud)