2017-10-13 67 views
1

我最近開發了我的本地機器一個Python代碼從mysql數據庫中讀取數據,並在谷歌大query.I使用服務帳戶插入進行身份驗證,以谷歌大查詢的自動認證目的和我的代碼可以成功執行沒有錯誤。現在我正試圖在docker python容器中運行我的腳本。一旦我運行我的代碼,收到一個認證消息,我不知道如何自動處理它,而無需用戶和系統之間的交互。處理Python腳本讀取和寫入數據使用泊塢窗

消息是:

「請訪問這個URL授權此應用程序: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=4xxxxxxxk0tmvj2m941jhre2nbqka17vqxxfxxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%xxxxxxxb&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbigquery&state=kszePnO3tOxxxxxx&prompt=consent&access_type=offline 輸入授權碼:回溯(最近通話最後一個):... .........

的EOFError:EOF讀線的時候 「

我的Python代碼:

import mysql.connector 
import pandas as pd 
from oauth2client.client import GoogleCredentials 
from bigquery import get_client 
import os 
import urllib.request 

service_account = '[email protected]' 
key = 'xxxxxxxxx.p12' 
project_id = 'xxxxxxxxx' 
db = mysql.connector.connect(user=$user, 
password=$password,host=$host,database=$database) 
df= pd.read_sql(sql_query,db) 
.... 
client = get_client(project_id, service_account=service_account, 
private_key_file=key, readonly=False) 

#Push dataframe to google bigquery 
df.to_gbq('GoogleBQDatbaseName.TableName',projectid,verbose=True,if_exists='append') 

任何建議如何我可以自動處理我的腳本中的身份驗證問題。 謝謝

回答

1

我做同樣的工作,因此與谷歌AUTH dockerfile的部分看起來像這樣:

RUN apt-get install -y software-properties-common curl 

RUN export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"; echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list 

RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 

RUN apt-get update && apt-get -y install google-cloud-sdk 

COPY YOUR_JSON_KEY_HERE.json /keys/ANY_NAME.json 

ENV GOOGLE_APPLICATION_CREDENTIALS ANY_NAME.json 

RUN gcloud auth activate-service-account --key-file=/keys/ANY_NAME.json 

所以,你必須創建谷歌服務帳戶昂得到谷歌雲端控制檯JSON關鍵。另外我使用

FROM ubuntu:16.04 

而且在這種情況下,你的Python腳本你沒有谷歌AUTH。我的意思是你不需要這部分代碼:

client = get_client(project_id, service_account=service_account, private_key_file=key, readonly=False) 
+0

感謝您的詳細的答案瓦西里......我會嘗試你的解決方案。不幸的是,在現階段,我無法爲服務帳戶創建JSON文件,因爲我沒有足夠的權限。我只有P12文件,項目ID和服務帳戶的電子郵件文件在我hand.Since它的工作好了我的本地系統上,我認爲有可能是搬運工來處理這種不創建JSON文件就像我在做同樣的事情的解決方案我本地Mac機器。 –

+0

您可以嘗試P12密鑰文件,而不是JSON,但我不知道將它的工作與否 –