1

我已经设法查询表,提取模式并向(自定义)表添加一行,但无法通过 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'")

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

sf.query("delete [SELECT Id FROM MyTable__c where id = 'a0D2R067009YpAeWAK']")

如此处所述,但不幸的是它引发了:

SalesforceMalformedRequest: Malformed request https://eu20.salesforce.com/services/data/v38.0/query/?q=delete+%5BSELECT+Id+FROM+MyTable__c+where+id+%3D+%27a0D2R067009YpAeWAK%27%5D. Response content: [{'message': 'unexpected token: delete', 'errorCode': 'MALFORMED_QUERY'}]

已经尝试过这方面的变体,结果基本相同。任何想法如何让它工作?

4

1 回答 1

3

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

simple_salesforce文档中有一个示例:

sf.Contact.delete('003e0000003GuNXAA0')

如果你想通过 Anonymous Apex 来做,你可以使用restful()打工具 API 的方法,但这不是做简单删除操作的“正确”方法,而且会更慢。

sf.restful(
    "tooling/executeAnonymous",
    {"anonymousBody": "delete [SELECT Id FROM Contact WHERE <condition>];"},
)
于 2019-07-05T15:13:06.600 回答