无法使用Python连接到云SQL(PostgreSQL)';s炼金术
我在Google Cloud平台上设置了Cloud SQL实例,并按照官方指示进行了操作,但似乎无法连接到Cloud SQL实例。当我尝试进行健全性检查并通过Cloud Shell访问PostgreSQL数据库时,我能够成功连接 有人能帮忙吗?我将不胜感激 代码:无法使用Python连接到云SQL(PostgreSQL)';s炼金术,python,postgresql,google-cloud-platform,sqlalchemy,Python,Postgresql,Google Cloud Platform,Sqlalchemy,我在Google Cloud平台上设置了Cloud SQL实例,并按照官方指示进行了操作,但似乎无法连接到Cloud SQL实例。当我尝试进行健全性检查并通过Cloud Shell访问PostgreSQL数据库时,我能够成功连接 有人能帮忙吗?我将不胜感激 代码: 使用云SQL代理从外部应用程序连接到云SQL 为了实现这一点,请遵循相关标准 所述步骤包括: 在云控制台上启用云SQL管理API 根据您的操作系统安装相关的代理客户端 请使用任何可用的方法来执行此操作 在终端上使用/cloud\u s
使用云SQL代理从外部应用程序连接到云SQL 为了实现这一点,请遵循相关标准 所述步骤包括:
/cloud\u sql\u proxy-instances=INSTANCE\u CONNECTION\u NAME=tcp:5432&
调用代理,并通过更改代码和使用SQLALCHEMY连接代理:注意:上面的代码假设您没有尝试在生产环境中连接到代理,而是使用连接到代理。我找到了另一种不使用云SQL代理连接到PostgreSQL GCP实例的方法 代码:
import sqlalchemy
username = '' # DB username
password = '' # DB password
host = '' # Public IP address for your instance
port = '5432'
database = '' # Name of database ('postgres' by default)
db_url = 'postgresql+psycopg2://{}:{}@{}:{}/{}'.format(
username, password, host, port, database)
engine = sqlalchemy.create_engine(db_url)
conn = engine.connect()
在尝试连接之前,我将我的IP地址列为白名单。()根据数据库客户端库,需要指定套接字(
/cloudsql/INSTANCE\u CONNECTION\u NAME/.s.PGSQL.5432
)
对于SQLAlchemy
,有以下示例:
db_user=os.environ[“db_user”]
db_pass=os.environ[“db_pass”]
db_name=os.environ[“db_name”]
db\u socket\u dir=os.environ.get(“db\u socket\u dir”,“/cloudsql”)
cloud\u sql\u connection\u name=os.environ[“cloud\u sql\u connection\u name”]
pool=sqlalchemy.create\u引擎(
#等效URL:
#postgresql+pg8000://:@/
#?unix_sock=/.s.PGSQL.5432
sqlalchemy.engine.url.url.create(
drivername=“postgresql+pg8000”,
username=db#u user,例如“我的数据库用户”
password=db#u pass,例如“我的数据库密码”
数据库=数据库名称,例如“我的数据库名称”
质疑={
“unix_sock”:“{}/{}/.s.PGSQL.5432”。格式(
db_socket_dir,例如“/cloudsql”
云(sql连接名称)即:
}
),
**数据库配置
)
请注意,此示例使用的是
pg8000
,它使用unix\u sock
而不是unix\u socket
作为套接字标识符。您的错误消息意味着错误的IP地址或云SQL正在阻止(未启用)您的IP地址。在Google Cloud SQL中,您是否将IP地址列为白名单?您是否阅读了有关如何设置客户端和连接的文档?建议。不要使用您正在尝试的方法连接。改用云SQL代理。@RileyHun要进一步了解John Hanley提供的关于使用云SQL代理的评论,请参阅适当的。从sqlalchemy
导入create\u engine
后,连接语句应该是这样的,正如您已经在代码中显示的:engine=create\u engine('postgresql+psycopg2://DATABASE\u USER:PASSWORD@localhost:5432/”)
为什么在不指定表名的情况下也可以这样做。上面的代码是用来连接到云SQL实例本身的。在前面提到的步骤4中初始化代理时,它获取实例的名称。如果您已经在实例中创建了数据库(例如,名为MYDB),则可以相应地更改数据库URL:'postgresql+psycopg2://数据库用户:PASSWORD@localhost:5432/[MYDB]'
Is the server running on host "XX.XX.XXX.XX" and accepting
TCP/IP connections on port XXXX?
from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg2://DATABASE_USER:PASSWORD@localhost:5432/')
import sqlalchemy
username = '' # DB username
password = '' # DB password
host = '' # Public IP address for your instance
port = '5432'
database = '' # Name of database ('postgres' by default)
db_url = 'postgresql+psycopg2://{}:{}@{}:{}/{}'.format(
username, password, host, port, database)
engine = sqlalchemy.create_engine(db_url)
conn = engine.connect()