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

使用ldap3模块获取超1000条LDAP数据遇SizeLimitExceededResult问题求助

解决LDAP分页查询触发sizeLimitExceeded的问题

我之前也碰到过Active Directory里这种分页查询失效的情况,你的问题核心是没有正确配置分页参数,导致ldap3的自动分页机制没有正常工作,服务器直接返回了大小限制错误。

先看你遇到的错误:

ldap3.core.exceptions.LDAPSizeLimitExceededResult: LDAPSizeLimitExceededResult - 4 - sizeLimitExceeded - None - None - searchResDone - None

这个错误说明服务器拒绝返回超过1000条的结果,而你的分页查询没有正确触发——问题出在paged_size=None这个参数上。当设置为None时,ldap3会尝试使用服务器的默认分页大小,但很多AD服务器会强制要求客户端明确指定分页大小,而且必须等于或小于服务器的单页限制(通常是1000)。

修改后的完整代码

# import class and constants
from ldap3 import Server, Connection, ALL, SUBTREE
# define the server
s = Server(host='xyz', port=xxxx, use_ssl=True, get_info='ALL')
c = Connection(s, auto_bind='NONE', version=3, authentication='ANONYMOUS', client_strategy='SYNC', auto_referrals=True, check_names=True, read_only=False, lazy=False, raise_exceptions=False)
c.bind()

# 关键修改:设置paged_size为服务器允许的单页最大值(AD默认1000)
results = c.extend.standard.paged_search(
 search_base = 'Ou=XYZ,dc=org,dc=com',
 search_filter = '(AppID=*)',
 search_scope = SUBTREE,
 get_operational_attributes=True,
 attributes=['*'],
 generator=True,
 paged_size=1000  # 这里从None改成1000
)

i=0
for entry in results:
    # 过滤掉searchResDone这类非条目响应
    if entry['type'] == 'searchResEntry':
        print(entry)
        i+=1
print(f"总共获取到 {i} 条记录")

关键调整说明

  1. 设置paged_size=1000:这是AD服务器默认的单页返回上限,明确指定这个值后,ldap3会自动处理分页逻辑——每获取1000条就自动发送下一页的请求,直到所有结果都被获取。
  2. 过滤非条目响应:分页查询过程中会返回searchResDone这类控制消息,加上类型判断可以避免打印无关内容,同时保证计数准确。

额外注意事项

  • 如果你的AD服务器的单页限制不是1000,可以尝试调整paged_size为更小的值(比如500),确保在服务器的限制范围内。
  • 保持generator=True:这个参数让结果以生成器形式返回,避免一次性加载所有5000+条记录到内存,提升性能。

这样修改后,应该就能完整获取所有5000+条记录了,不会再触发大小限制错误。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:34:35