使用Google BigQuery Python Client无需循环赋值查询结果的方法
实现方案
你要的无循环写法完全可以实现,你的查询本身只返回1行1列的结果,直接取结果迭代器的首个元素即可,不需要额外写for循环。
方案1:用next()直接取首行(最精简)
client.query()会返回异步的QueryJob对象,你可以直接调用它的.result()方法拿到结果迭代器,再用内置函数next()取第一行即可:
from google.cloud import bigquery client = bigquery.Client() query = """ SELECT count(*) AS table_count FROM project.dataset.INFORMATION_SCHEMA.TABLES """ # 直接通过下标取值 count = next(client.query(query).result())[0] # 也可以通过字段别名取,可读性更高 count = next(client.query(query).result()).table_count
如果要兼容查询无返回结果的场景,可以给next()设置默认值,避免抛出StopIteration异常:
# 无返回结果时默认count为0 count = next(client.query(query).result(), [0])[0]
方案2:转DataFrame取值(适合习惯用pandas的场景)
如果你的项目本身已经依赖pandas,可以直接把查询结果转为DataFrame后取首个值:
count = client.query(query).to_dataframe()["table_count"][0]
内容的提问来源于stack exchange,提问作者Tristan Thompson
相关产品推荐
相关产品推荐

