我正在尝试导出在我的网站中使用Janrain在Python中注册的所有用户。从Janrain文档中,看起来entity.find是获取数据的最佳调用。所以我输入以下代码:
get_user = api.call
(
"entity.find",
type_name = "user",
)
但是,代码只返回100行数据。我知道还有另一个名为max_results的字段,但最多可能需要10000条记录。
那么,如何在没有行限制的情况下使用api导出所有用户数据?
谢谢!
答案 0 :(得分:2)
您必须批量导出数据。
如您所述,entity.find调用采用max_results参数。您可以尝试将其设置为较高的值,但在大多数情况下,记录数将超过有效负载限制和/或API超时限制,并且API调用将失败。
Janrain建议使用first_results和max_results参数逐步执行值集,例如,批量为1000:
first_result=0&max_results=1000
first_result=1000&max_results=1000
first_result=2000&max_results=1000
有效地检索大量实体
如果要检索记录组,则其他人可能会删除您已检索的其中一个组中的记录。因为entity.find从列表的开头计算每组记录,所以下一个组可能会错过填充已删除记录空间的记录。 要避免此类问题,请遵循以下最佳做法:
收集大量记录时: 给定n,返回的最大结果数(1000是一个好的起点; 10000是最大值),f,记录查询过滤器,使用参数:
- sort_on=["id"]
- max_results=n
然后:
1. Call entity.find with filter=f
2. Let x be the id of the last record in the result set
3. Call entity.find with filter=f and id > x
4. If the result set is not empty, go to step 2
这会导致快速搜索,不会丢失任何记录。如果您不想使用查询过滤器,请在步骤1中忽略调用中的过滤器参数,并使用filter = id> x在步骤3中。
注意:Janrain还建议在大多数用例中避免使用“show_total_count”参数,因为它会带来显着的性能损失。此外,如果系统是具有相对大量活动注册的实时生产系统,则与起始总数相比,在导出过程结束时,记录总数可能会有所不同。