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

使用Snowflake Python Connector拉取数据时遇SSLError问题求助

Snowflake Python Connector 无LIMIT时触发SSLError的解决方案

问题场景

  • 已通过Snowflake Python Connector成功连接数据库并执行查询
  • 未限制结果行数时,调用cursor.fetch()触发以下SSLError:
SSLError: HTTPSConnectionPool(host='XXXXXXXXXXXXXX.blob.core.windows.net', port=443): 
Max retries exceeded with url: /results/XXX..XXX=https&se=2022-1012...&sr=b&sp=r&sig=X...X%2XX.XX=gzip 
(Caused by SSLError(SSLError("bad handshake: Error([('SSL routines','tls_process_server_certificate', 'certificate verify failed')])")))
  • 添加LIMIT 300等限制条件后,fetchall()可正常获取数据

解决方案

1. 指定SSL根证书路径

大结果集时Snowflake会将数据存到Azure Blob Storage,若本地根证书库不包含Blob存储的证书,就会触发验证失败。手动指定证书路径:

import snowflake.connector

conn = snowflake.connector.connect(
    user='你的用户名',
    password='你的密码',
    account='你的账号',
    warehouse='你的仓库',
    database='你的数据库',
    schema='你的schema',
    ssl_ca='/path/to/root_cert.pem'  # 替换为本地根证书文件路径
)
  • 可使用系统默认根证书:Linux下一般是/etc/ssl/certs/ca-certificates.crt,Windows可从证书管理器导出根证书

2. 临时禁用SSL验证(仅测试环境)

测试环境下可临时关闭验证排查问题,生产环境绝对禁止使用:

conn = snowflake.connector.connect(
    # 保留其他连接参数
    insecure_mode=True
)

3. 分批获取结果集

不用LIMIT,改用分批拉取数据,避免一次性请求大结果:

cursor = conn.cursor()
cursor.execute("SELECT * FROM 你的表")
batch_size = 1000  # 可根据实际调整批次大小
while True:
    batch_data = cursor.fetchmany(batch_size)
    if not batch_data:
        break
    # 处理每一批数据
    for row in batch_data:
        # 你的业务逻辑
        print(row)

4. 检查本地SSL与代理配置

  • 若使用代理,确认代理未拦截SSL证书,代理配置正确
  • 更新本地OpenSSL版本,旧版本可能存在证书验证兼容性问题
  • 更新系统根证书库:Linux执行update-ca-certificates,Windows通过系统更新或手动导入根证书

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:05