处理Python脚本读取和写入数据使用泊坞窗
问题描述:
我最近开发了我的本地机器一个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')
任何建议如何我可以自动处理我的脚本中的身份验证问题。 谢谢
答
我做同样的工作,因此与谷歌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)
感谢您的详细的答案瓦西里......我会尝试你的解决方案。不幸的是,在现阶段,我无法为服务帐户创建JSON文件,因为我没有足够的权限。我只有P12文件,项目ID和服务帐户的电子邮件文件在我hand.Since它的工作好了我的本地系统上,我认为有可能是搬运工来处理这种不创建JSON文件就像我在做同样的事情的解决方案我本地Mac机器。 –
您可以尝试P12密钥文件,而不是JSON,但我不知道将它的工作与否 –