无法通过API将Pandas DataFrame写入BigQuery问题求助
解决:Pandas DataFrame写入BigQuery报AttributeError错误
错误根源
你传给update_table函数的table_id是个列表['table_name'],但BigQuery的load_table_from_dataframe方法要求字符串格式的完整表ID(格式为项目ID.数据集ID.表名)。列表类型不支持客户端需要的to_api_repr()方法,所以直接抛出了这个错误。
修复方法
- 把表ID改成字符串:不要用列表,直接写完整的表ID字符串,比如你的项目是
project,数据集叫my_dataset,表名是table_name,就写成'project.my_dataset.table_name'。 - 修改调用代码:把
table = ['table_name']这行替换成正确的字符串表ID。
修正后的代码
import requests import json import pandas as pd import google.auth from google.cloud import bigquery import numpy as np def authenticate(): creds, projects = google.auth.default() project = 'project' # 这里替换成你的实际项目ID location = 'US' client = bigquery.Client(project=project, location=location) return client def update_table(table_id, data, client): job_config = bigquery.LoadJobConfig( create_disposition="CREATE_IF_NEEDED", write_disposition="WRITE_TRUNCATE") job = client.load_table_from_dataframe( data, table_id, job_config=job_config) return job.result() df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D']) print(df) # 替换为你的完整表ID,格式:项目ID.数据集ID.表名 table = 'project.your_dataset.table_name' client = authenticate() xx = update_table(table, df, client)
额外提醒
- 确认你的认证账号有BigQuery的写入权限
- 如果数据集还没创建,得先手动建好(
CREATE_IF_NEEDED只会自动建表,不会建数据集)
内容的提问来源于stack exchange,提问作者Aaron Stone
相关产品推荐
相关产品推荐

