Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Python连接到云SQL(PostgreSQL)';s炼金术_Python_Postgresql_Google Cloud Platform_Sqlalchemy - Fatal编程技术网

无法使用Python连接到云SQL(PostgreSQL)';s炼金术

无法使用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

我在Google Cloud平台上设置了Cloud SQL实例,并按照官方指示进行了操作,但似乎无法连接到Cloud SQL实例。当我尝试进行健全性检查并通过Cloud Shell访问PostgreSQL数据库时,我能够成功连接

有人能帮忙吗?我将不胜感激

代码:


使用云SQL代理从外部应用程序连接到云SQL

为了实现这一点,请遵循相关标准

所述步骤包括:

  • 在云控制台上启用云SQL管理API
  • 根据您的操作系统安装相关的代理客户端
  • 请使用任何可用的方法来执行此操作
  • 在终端上使用
    /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()