2017-08-15 58 views
0

我使用python3.5和我使用python創建經由大量查詢bigquery clienthttps://github.com/tylertreat/BigQuery-Python類型錯誤:initial_value必須STR或無,而不是字節(大量查詢)

下面是代碼:

from bigquery import get_client 

PROJECT_ID = 'api-project-xxxxxx' 
SERVICE_ACCOUNT = '[email protected]' 
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 

回答

1

StringIO一個str對象轉換成流。您需要通過str,但private_key是一個字節對象,因爲您正在以二進制模式讀取文件。試試這個:

with open(PRIVATE_KEY_PATH, 'r') as f: 
    private_key = f.read() 

其餘的代碼保持不變。

+0

感謝您的回覆。但得到了另一個錯誤: 'UnicodeDecodeError:'ascii'編解碼器無法解碼位置1中的字節0x82:序號不在範圍內(128)' –

+0

@TsuyoshiEndo與此無關。你可以打開另一個問題嗎? –

+0

好的。非常感謝!我確認了不正確的p12文件。 所以,我用正確的文件沒有錯誤。 –

相關問題