Python TypeError:初始值必须是str或None,而不是bytes(bigquery)
我使用的是python3.5,我使用python()通过bigquery创建了Python TypeError:初始值必须是str或None,而不是bytes(bigquery),python,google-bigquery,Python,Google Bigquery,我使用的是python3.5,我使用python()通过bigquery创建了bigquery客户端 代码如下: from bigquery import get_client PROJECT_ID = 'api-project-xxxxxx' SERVICE_ACCOUNT = 'xxxx@api-project-xxxx.iam.gserviceaccount.com' PRIVATE_KEY_PATH = 'xxxx.p12' with open(PRIVATE_KEY_PATH, '
bigquery客户端
代码如下:
from bigquery import get_client
PROJECT_ID = 'api-project-xxxxxx'
SERVICE_ACCOUNT = 'xxxx@api-project-xxxx.iam.gserviceaccount.com'
PRIVATE_KEY_PATH = 'xxxx.p12'
with open(PRIVATE_KEY_PATH, 'rb') as f:
private_key = f.read()
client = get_client(PROJECT_ID,private_key=private_key,service_account=SERVICE_ACCOUNT,readonly=True)
我得到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-181-858afcfa416a> in <module>()
----> 1 client = get_client(PROJECT_ID,private_key=private_key,service_account=SERVICE_ACCOUNT,readonly=True)
/Users/XXXXXX/.pyenv/versions/anaconda3-2.4.0/lib/python3.5/site-packages/bigquery/client.py in get_client(project_id, credentials, service_url, service_account, private_key, private_key_file, json_key, json_key_file, readonly, swallow_results)
131 credentials = _credentials().from_p12_keyfile_buffer(
132 service_account,
--> 133 StringIO(private_key),
134 scopes=scope)
135
TypeError: initial_value must be str or None, not bytes
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1客户端=获取客户端(项目ID,私钥=私钥,服务帐户=服务帐户,只读=真)
/get_client中的Users/XXXXXX/.pyenv/versions/anaconda3-2.4.0/lib/python3.5/site-packages/bigquery/client.py(项目id、凭证、服务url、服务帐户、私钥、私钥文件、json_密钥、json_密钥文件、只读、结果)
131凭据=\u凭据()。来自\u p12\u密钥文件\u缓冲区(
132服务单位帐户,
-->133 StringIO(私钥),
134范围=范围)
135
TypeError:初始值必须是str或None,而不是bytes
StringIO
将str
对象转换为流。您需要传递一个str
,但是private\u key
是一个字节对象,因为您正在以二进制模式读取文件。试试这个:
with open(PRIVATE_KEY_PATH, 'r') as f:
private_key = f.read()
其余代码保持不变。谢谢您的回复。但出现另一个错误:UnicodeDecodeError:“ascii”编解码器无法解码位置1中的字节0x82:序号不在与此无关的范围(128)
@TsuyoshiEndo。你能再问一个问题吗?好的。谢谢!我确认p12文件不正确。所以,我使用了正确的文件,没有错误。@TsuyoshiEndo啊,很高兴听到这个消息。如果你觉得它有帮助,请考虑接受。谢谢