是否可以在没有 OAuth2 身份验证对话框的情况下从 Google App-Engine (python) 连接和查询 BigQuery 表?

Posted

技术标签:

【中文标题】是否可以在没有 OAuth2 身份验证对话框的情况下从 Google App-Engine (python) 连接和查询 BigQuery 表?【英文标题】:Is it possible to connect and query a BigQuery table from Google App-Engine (python) without OAuth2 authentication dialog? 【发布时间】:2017-01-19 22:51:16 【问题描述】:

我正在开发一个 Google App-Engine 项目,该项目在数据存储区中存储了大约 10 万个实体。由于我必须在这些实体的字符串属性中进行搜索,因此我必须找到一种有效的方法。

经过一番研究,我发现 Google 的 BigQuery 服务看起来非常适合我。我已经通过网络界面将实体导入 BigQuery,但我无法从 App-Engine 代码连接并在 BigQuery 上运行查询。

我的 App-Engine 项目没有网络界面。它只生成移动应用程序使用的 JSON 输出。

所以,我的问题是:是否可以在没有 OAuth2 身份验证对话框的情况下从 App-Engine python 代码连接和运行查询?

【问题讨论】:

【参考方案1】:

是的。只需使用here 所述的所谓“服务帐户”即可。然后,在您导出 GOOGLE_APPLICATION_CREDENTIALS 以指向凭据文件后,一些简单的 Python 代码:

from google.cloud import bigquery
client = bigquery.Client(project='PROJECT_ID')
for dataset in client.list_datasets():
        do_something_with(dataset)

更多信息here。

【讨论】:

谢谢格雷厄姆。我已经尝试过了,但我总是收到此错误消息:“从 google.cloud 导入 bigquery ImportError:没有名为 cloud 的模块”。我以为我必须先将 google-api-python-client 库“供应”到我的项目中,但每次尝试都失败了。 是的,需要安装模块:pip install --upgrade google-cloud 再次感谢您,格雷厄姆。你为我节省了无数个小时。我对这个话题很困惑,但现在我可以在黑暗中看到光明:) 没问题!很高兴我能帮上忙。【参考方案2】:

请注意,这是区分大小写的 - 检查“客户”的大写;

my_bigquery_client = bigquery.client(project = 'my_project')

- 失败并出现错误 "TypeError: 'module' object is not callable"

my_bigquery_client = bigquery.Client(project = 'my_project')

- 这行得通。

【讨论】:

以上是关于是否可以在没有 OAuth2 身份验证对话框的情况下从 Google App-Engine (python) 连接和查询 BigQuery 表?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Spring Security 中仅使用刷新令牌请求访问令牌 oauth2?没有基本身份验证?

使用 OAuth2 进行地理服务器身份验证

是否可以在不重定向到外部登录页面的情况下进行 SPA 身份验证

如何在不访问身份验证服务器的情况下验证 OAuth2 访问令牌 (JWT)

使用 OAuth2 自定义来自 Spring Security 的身份验证错误

RestSharp OAuth2 承载身份验证失败,访问被拒绝