如何在使用 Python (PyCharm) 查询 Google Big Query 时修复 CERTIFICATE_VERIFY_FAILED 错误

Posted

技术标签:

【中文标题】如何在使用 Python (PyCharm) 查询 Google Big Query 时修复 CERTIFICATE_VERIFY_FAILED 错误【英文标题】:How to fix CERTIFICATE_VERIFY_FAILED error while querying Google Big Query using Python (PyCharm) 【发布时间】:2021-07-19 06:29:55 【问题描述】:

我对 Python 和 Google Cloud Platform 还很陌生。 我有一个用例在 BigQuery 平台上执行 SQL 命令,然后将查询的输出放在文件中。我正在使用 PyCharm IDE 在 Windows 10 笔记本电脑上运行 Python 命令。

我有可用的服务帐户 JSON,我用它来设置 GOOGLE_APPLICATION_CREDENTIALS 值。该命令失败并出现以下错误:

google.api_core.exceptions.RetryError: 调用 functools.partial(functools.partial(> 的绑定方法 JSONConnection.api_request) 时超过了 120.0 秒,方法='POST', path='/projects//jobs', data='jobReference': 'jobId': '', 'projectId': '', 'location': '' , 'configuration': 'query': 'useLegacySql': False, 'query': '\nSELECT *\nFROM bq-table-name-here\nLIMIT 100\n', timeout=None)), 最后一个异常:HTTPSConnectionPool (host='oauth2.googleapis.com', port=443): 最大重试次数超出 url: /token (由 SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败: 证书链中的自签名证书_ssl.c:1123)')))

我尝试执行的实际代码如下:

 import yaml
 import os
 import sys
 from google.cloud import bigquery
 from google.oauth2 import service_account
 from datetime import datetime
    
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] ="C:\\Users\\username\\Documents\\Code\\Creds\\creds.json"
    credentials = os.environ['GOOGLE_APPLICATION_CREDENTIALS']
    
    sql_script = '''
    SELECT *
    FROM `<project-name>.<dataset-name>.<table-name>`
    LIMIT 100
    '''
    
    client = bigquery.Client()
    location = 'asia-southeast1'
    
    query_job = client.query(sql_script,location=location).to_dataframe()
    query_job.to_csv('table_schema_extract.csv')

非常感谢我可能做错了什么,这导致了这个错误。

感谢和干杯! 苏维拉特

【问题讨论】:

该错误是由自签名证书引起的。你在代理后面吗?使用您的网络环境的详细信息编辑您的问题。 不,据我所知,我不在代理后面。我是否需要设置任何证书才能运行此查询提取? 根据您的回答,您在代理后面。这意味着管理代理的任何人都可以完全访问您的数据。这包括您的登录名、密码、电子邮件等。 【参考方案1】:

显然,我组织的域配置的工作方式是,无论何时我访问任何经过 Google 帐户验证的服务,例如 GCP、Gmail、Google Drive 等。浏览器的安全证书不会显示为默认的 Google 证书,而是显示我的组织的证书。

我认为这与我的组织中使用的 Google 套装有关。 每次我使用 Python 访问任何 Google 云服务时,它都会尝试使用默认的 Google 证书而不是我组织的证书。由于我的组织笔记本电脑域配置的方式是完成的,因此它不允许正确地进行身份验证。 为了解决这个问题,当我访问 Google 云服务页面时,我必须从浏览器中手动提取证书文件,然后将此证书文件附加到 python 的默认证书文件中。一旦我尝试执行相同的 Python 命令,它就会成功运行而不会出现任何问题。当您从浏览器访问证书文件时,请记住附加所有证书级别的证书,而不仅仅是根或父级证书。 知道Python证书文件位置的方法是:

    执行:pip install certifi 导入 CERTIFI UTILITY:导入证书 运行:打印(certifi.where()) 这将为您提供如下路径: C:\Users\PycharmProjects\venv\lib\site-packages\certifi\cacert.pem 您只需确保将从浏览器中提取的 Google 证书附加到此 .PEM 文件中。这确实花了我一些时间来弄清楚,因为我显然是 Python 新手以及 SSL 认证意识。

【讨论】:

您能否向我们展示将 Google 证书添加到 >PEM 文件的步骤?

以上是关于如何在使用 Python (PyCharm) 查询 Google Big Query 时修复 CERTIFICATE_VERIFY_FAILED 错误的主要内容,如果未能解决你的问题,请参考以下文章

pycharm爬取的数据在哪

查看python库下函数的具体实现

pycharm如何配置编译器(从python2切换到python3)

如何在pycharm中创建python工程

如何在pycharm中创建python工程?

如何在 PyCharm 中选择 Python 版本?