Simple_Salesforce: making bulk SQL calls within a date range

本秂侑毒 提交于 2019-12-12 19:18:48

问题


I'm using Simple_Salesforce to grab a chunk of data using the salesforce api. I was wondering if there was anyway to specify a date range when making calls. I keep getting the following error.

query = 'SELECT Id, Name FROM Account WHERE createddate > 1451621381000'

sf.bulk.Account.query(query)

  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/simple_salesforce/bulk.py", line 157, in _get_batch_results
    url_query_results = "{}{}{}".format(url, '/', result.json()[0])
IndexError: list index out of range

query = 'SELECT Id, Name FROM Account WHERE createddate > 2017-01-01'

This works, so I can filter on conditions

query = "SELECT Id, CreatedDate FROM Tbl WHERE Id = '500G0000008LeHzIAK'"
dd = sf.bulk.Tbl.query(query)
df = pd.DataFrame(dd)

However, date seems to be saved in an odd manner and this throws an error

query = "SELECT Id, CreatedDate FROM Case Tbl CreatedDate = '1328828872000L'"
query = "SELECT Id, CreatedDate FROM Case Tbl CreatedDate > '1328828872000L'"
dd = sf.bulk.Tbl.query(query)
df = pd.DataFrame(dd)

Date values look like this: 1463621383000L


回答1:


Datetime fields (e.g. CreatedDate) can be filtered only by values in Datetime format, with or without timezone offset, all without quotes. (read more about SOQL Date Formats)

SELECT Id FROM Case WHERE CreatedDate > 2017-01-31T23:59:59Z

Date fields can be filtered only by values in Date format

SELECT Id FROM Opportunity WHERE CloseDate > 2017-01-31

If you are interested in records created e.g. in the last minute, you can build the value by:

sf_timestamp = time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(time.time() - 60))
sql = "SELECT Id FROM Account WHERE CreatedDate > %s" % sf_timestamp

I see that your numeric timestamp is in miliseconds, therefore you must divide it by 1000 first.

I don't believe that your example createddate > 2017-01-01 works for you because it shouldn't work according the reference. You get an error message:

Error: value of filter criterion for field 'createddate' must be of type dateTime and should not be enclosed in quotes

It seems that Simple Salesforce doesn't report correctly the original error message from Salesforce and only subsequent errors are eventually reported by Simple-Salesforce. (All examples verified, but not by simple-salesforce.)



来源:https://stackoverflow.com/questions/45241330/simple-salesforce-making-bulk-sql-calls-within-a-date-range

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!