You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pyknackhq库获取Knack全量数据并转为Pandas DataFrame

解决pyknackhq获取Knack全量记录并转换为Pandas DataFrame的问题

这个问题我之前也碰到过——pyknackhq的find()方法默认是分页返回数据的,哪怕你在Knack后台设置了单页显示全量,API层面还是会遵循自身的分页规则(默认每页25条)。要获取全部记录,你需要手动处理分页逻辑,具体可以这么做:

核心思路

Knack的API(包括pyknackhq封装的)支持通过page和rows_per_page参数控制分页,我们可以循环请求每一页的数据,直到没有更多记录返回,再把所有数据合并成一个列表,最后转换为Pandas DataFrame。

完整代码示例

import pandas as pd
from pyknackhq import Knack

# 初始化Knack对象(替换成你的app_id和api_key)
knack = Knack(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY")
undec_obj = knack.get_object("YOUR_OBJECT_ID")  # 替换成你的目标对象ID

all_records = []
current_page = 1
# 可以设置每页最大条数(Knack API允许的最大值通常是1000)
rows_per_page = 1000

while True:
    # 请求当前页的记录
    page_records = undec_obj.find(page=current_page, rows_per_page=rows_per_page)
    
    # 如果当前页没有记录,说明已经取完所有数据,退出循环
    if not page_records:
        break
    
    # 将当前页记录添加到总列表
    all_records.extend(page_records)
    current_page += 1

# 转换为Pandas DataFrame
df = pd.DataFrame(all_records)

# 验证结果
print(f"成功获取到 {len(df)} 条记录")
print(df.head())

关键说明

  • rows_per_page参数:设置更大的值(比如1000)可以减少API请求次数,提高效率,不过要注意Knack API对单页返回条数的限制(一般最大是1000)。
  • 循环终止条件:当find()返回空列表时,说明已经没有更多数据,此时退出循环即可,不需要提前计算总页数(避免数据在请求过程中更新导致总页数变化的问题)。
  • 数据转换:直接用pd.DataFrame()将记录列表转换为DataFrame,Knack返回的每条记录是字典格式,Pandas可以直接识别。

内容的提问来源于stack exchange,提问作者I.Pandora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:19:42