Simple_Salesforce:在日期范围内进行批量SQL调用

时间:2017-07-21 15:23:24

标签: python salesforce soql

我正在使用Simple_Salesforce使用salesforce api获取大量数据。我想知道在拨打电话时是否还有指定日期范围。我一直收到以下错误。

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'

这样可行,所以我可以过滤条件

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

但是,日期似乎以奇怪的方式保存,这会引发错误

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)

日期值如下所示:1463621383000L

1 个答案:

答案 0 :(得分:2)

日期时间字段(例如CreatedDate)只能通过日期格式中的值进行过滤,有或没有时区偏移,均不带引号。 (阅读更多关于SOQL Date Formats

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

日期字段只能按日期格式

中的值进行过滤
SELECT Id FROM Opportunity WHERE CloseDate > 2017-01-31

如果您对创建的记录感兴趣,例如在最后一刻,您可以通过以下方式构建值:

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

我看到您的数字时间戳以毫秒为单位,因此您必须先将其除以1000.

我不相信您的示例createddate > 2017-01-01适合您,因为它不应该根据参考。您收到一条错误消息:

  

错误:字段'createddate'的过滤条件值必须是dateTime类型,不应该用引号括起来

Simple Salesforce似乎无法正确报告Salesforce的原始错误消息,并且最终只会由Simple-Salesforce报告后续错误。 (所有示例都经过验证,但不是简单的销售人员。)