运行BigQuery同步查询代码遇AttributeError:'QueryResults'无'result'属性求助
解决BigQuery
AttributeError: 'QueryResults' object has no attribute 'result'问题 错误根源
你碰到的问题核心在于run_sync_query是同步执行查询的方法——它执行完成后直接返回的就是包含查询结果的QueryResults对象,根本不需要再调用.result()方法。这个.result()是给异步查询的QueryJob对象用的,所以才会抛出属性不存在的报错。
另外还有个小细节要修正:你循环里打印的row.start_time在你的SQL查询里根本没被选中,运行后会触发另一个属性错误,得一起调整。
修正后的可用代码
from google.cloud import bigquery import datalab.bigquery as bq # 先补上你遗漏的客户端初始化步骤 client = bigquery.Client() query_job = client.run_sync_query(""" SELECT CONCAT( 'https://stackoverflow.com/questions/', CAST(id as STRING)) as url, view_count FROM `bigquery-public-data.stackoverflow.posts_questions` WHERE tags like '%google-bigquery%' ORDER BY view_count DESC LIMIT 10""") # 同步查询执行后,query_job本身就是结果集,无需调用.result() for row in query_job: # 打印查询中实际选中的字段 print("问题链接: {}, 浏览量: {}".format(row.url, row.view_count))
更推荐的现代API写法
顺便提一句,run_sync_query属于比较老旧的API了,现在官方更推荐使用client.query()方法,它的用法更统一——不管同步还是异步场景,都可以用.result()等待查询完成并获取结果,写法更直观也不容易踩坑:
from google.cloud import bigquery client = bigquery.Client() query = """ SELECT CONCAT( 'https://stackoverflow.com/questions/', CAST(id as STRING)) as url, view_count FROM `bigquery-public-data.stackoverflow.posts_questions` WHERE tags like '%google-bigquery%' ORDER BY view_count DESC LIMIT 10""" # 用query方法创建查询任务 query_job = client.query(query) # 调用.result()等待查询完成并获取结果 results = query_job.result() for row in results: print("问题链接: {}, 浏览量: {}".format(row.url, row.view_count))
内容的提问来源于stack exchange,提问作者New to Python and Django
相关产品推荐
相关产品推荐

