如何解决PyCharm用Python查询Google BigQuery出现CERTIFICATE_VERIFY_FAILED错误
错误原因排查
你的报错核心由两个问题共同导致:
- 代码层面的凭证传递逻辑有误,虽然你设置了服务账号路径的环境变量,但没有完成凭证实例化,也没有主动将凭证传递给BigQuery客户端
- 网络层面的SSL证书校验失败:你的Windows网络环境(通常是企业内网的防火墙/代理做了SSL流量拦截)在请求链路中插入了自签名证书,谷歌云Python SDK默认的可信CA证书库无法识别该证书,导致请求被拦截超时
修复步骤
- 第一步:修正代码中的凭证逻辑,完整可运行的参考代码如下:
import os from google.cloud import bigquery from google.oauth2 import service_account # 配置环境变量 os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "C:\\Users\\username\\Documents\\Code\\Creds\\creds.json" # 若企业内网需要走代理,取消注释下面两行替换为实际代理地址 # os.environ['HTTP_PROXY'] = "http://<代理地址>:<端口>" # os.environ['HTTPS_PROXY'] = "http://<代理地址>:<端口>" # 临时调试用关闭SSL校验(生产环境禁止使用) # os.environ['CURL_CA_BUNDLE'] = "" # os.environ['REQUESTS_CA_BUNDLE'] = "" # 安全方案:导入企业自签根证书路径,替换为你实际的证书路径 # os.environ['REQUESTS_CA_BUNDLE'] = "C:\\certs\\company_root.pem" # os.environ['SSL_CERT_FILE'] = "C:\\certs\\company_root.pem" # 实例化服务账号凭证 credentials = service_account.Credentials.from_service_account_file( os.environ['GOOGLE_APPLICATION_CREDENTIALS'] ) location = 'asia-southeast1' # 初始化BigQuery客户端,显式传入凭证、项目ID、区域,避免自动识别错误 client = bigquery.Client( credentials=credentials, project="<替换为你的GCP项目实际ID>", location=location ) sql_script = ''' SELECT * FROM `<project-name>.<dataset-name>.<table-name>` LIMIT 100 ''' # 执行查询并导出 df = client.query(sql_script).to_dataframe() df.to_csv('table_schema_extract.csv', index=False, encoding='utf_8_sig')
- 第二步:修复SSL校验问题,二选一即可:
- 本地临时调试:直接取消代码中关闭SSL校验的两行注释,即可快速验证逻辑是否通顺
- 长期安全使用:找企业IT部门获取内网的自签根证书,导出为PEM格式后存到本地,取消代码中对应证书路径配置的注释,替换为实际的证书路径
- 第三步:升级依赖包,避免旧版本SDK的已知bug,在PyCharm终端执行以下命令:
pip install --upgrade google-cloud-bigquery google-auth google-api-core
注意:如果你的服务账号没有对应BigQuery表的查询权限,修复上述问题后会出现权限报错,给对应服务账号授予BigQuery Data Viewer和BigQuery Job User权限即可
内容的提问来源于stack exchange,提问作者Suvrat
相关产品推荐
相关产品推荐

