使用python访问SF数据的最简单方法是什么?
我需要将它用于只读目的。
我尝试过使用BeatBox,但似乎与3.3兼容。
答案 0 :(得分:6)
答案 1 :(得分:3)
salesforce api是使用名为SOAP的W3C标准构建的,因此您可以尝试将WSDL文件传输到通用SOAP库中,而不是专用的salesforce库。 SUDS是一个成熟的,积极维护的库,我刚刚用它完成了一次成功的salesforce元数据api调用,看起来像是
from suds.client import Client
_SF_PRODUCT_VERSION = (0, 0, 0)
USER_AGENT_STR = '/'.join(['Salesforce',
_SF_PRODUCT_NAME,
'.'.join(str(x) for x in _SF_PRODUCT_VERSION)])
def login(username, password, token):
WSDL_URL = 'file://' + path.abspath(_ENTERPRISE_WSDL_FILE)
suds_client = Client(WSDL_URL)
suds_client.set_options(headers = {
'User-Agent': USER_AGENT_STR,
})
login_result = suds_client.service.login(username, password+token)
return login_result
login_result = login(SF_USERNAME, SF_PASSWORD, SF_TOKEN)
suds_client = Client(url=METADATA_WSDL_URL, location=login_result.metadataServerUrl)
session_header = suds_client.factory.create('SessionHeader')
session_header.sessionId = login_result['sessionId']
suds_client.set_options(
headers = {
'User-Agent': USER_AGENT_STR,
},
soapheaders = {
'SessionHeader': session_header,
})
describe_metadata_result = suds_client.service.describeMetadata(29.0)
print "describe metadata result"
print describe_metadata_result
(为了保护无辜,有些名字已被更改。)
因此它并不是那么简单,但是在这个非常成熟的SOAP库之上构建一些额外的时间,它可能比一些专用的salesforce库更强大。一方面,添加
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
在api调用之前将打印xml请求和响应,因为它们通过线路发送,这可能非常有用。
有一个名为python-salesforce-toolkit的专用库,它建立在SUDS之上,但它不再维护它,也不再维护它构建的SUDS版本。