我正在尝试将标准环境中的Python 3.7 GAE应用程序连接到Cloud SQL Postgres 9.6数据库。 此doc中描述了该过程。
不幸的是,GAE实例上不存在通常用于连接数据库的UNIX套接字/cloudsql/<DB_CONNECTION_NAME>
(文件夹/cloudsql
为空)。
有关我尝试过的内容的更多信息:
europe-west1
和europe-west3
中尝试过)beta_settings
配置文件中添加和删除了cloud_sql_instances
-> app.yaml
键,但无济于事。据我了解,无论如何,这仅应在灵活的环境中需要有人遇到并解决了这个问题吗?
关于此问题的SO问题要么很旧,没有答案,要么无法在我的环境中解决。
答案 0 :(得分:1)
基于类似的问题,在这里详细说明了最可能的根本原因: https://issuetracker.google.com/117804657#comment16
根据讨论,其他可能的原因可能是:
以下是一些建议:
在其他情况下,只需重新创建Cloud SQL实例或数据库即可,因为对快速入门的默认设置的修改可能难以跟踪。
欢呼
答案 1 :(得分:0)
我能够使用以下配置进行连接:
PROJECT=[[YOUR-PROJECT-ID]]
REGION=europe-west3
INSTANCE=instance-01
和:
import os
from flask import Flask
import psycopg2
db_user = os.environ.get('CLOUD_SQL_USERNAME')
db_pass = os.environ.get('CLOUD_SQL_PASSWORD')
db_name = os.environ.get('CLOUD_SQL_DATABASE')
db_conn = os.environ.get('CLOUD_SQL_INSTANCE')
app = Flask(__name__)
@app.route('/')
def main():
host = '/cloudsql/{}'.format(db_conn)
cnx = psycopg2.connect(
dbname=db_name,
user=db_user,
password=db_pass,
host=host
)
with cnx.cursor() as cursor:
cursor.execute('SELECT NOW() as now;')
result = cursor.fetchall()
current_time = result[0][0]
cnx.commit()
cnx.close()
return str(current_time)
和:
flask==1.0.2
psycopg2==2.8
,并且将${VARIABLE}
替换为值:
runtime: python37
env_variables:
CLOUD_SQL_INSTANCE: "${PROJECT}:${REGION}:${INSTANCE}"
CLOUD_SQL_USERNAME: ${USERNAME}
CLOUD_SQL_PASSWORD: ${PASSWORD}
CLOUD_SQL_DATABASE: ${DATABASE}