简体   繁体   中英

Authentication failure for user in connecting to GCP posrgreSQL cloud SQL via cloud sql proxy and using sqlalchemy in python on Ubuntu machine

I have crated a postgreSQL cloud SQL instance in GCP and I have created a user and a DB for it. I can connect to it via cloud_sql_proxy tool:

$ cloud_sql_proxy -instances=project_name:REGION:instance_name=tcp:5432 -credential_file=/path/to/key.json

I then can successfully connect to instance via psql and run queries and insert data etc in command line:

$ psql "host=127.0.0.1 port=5432 sslmode=disable dbname=myDBname user=myUser"
Password: 
psql (10.18 (Ubuntu 10.18-0ubuntu0.18.04.1), server 13.3)
WARNING: psql major version 10, server major version 13.
         Some psql features might not work.
Type "help" for help.

myDBname=>SELECT * FROM MyTable;

My issue is that when I try to use the sqlalchemy library and use the sample code provided in sqlalchemy example code like this:

import sqlalchemy
import os

db_config = {        
        "pool_size": 5,        
        "max_overflow": 2,
        "pool_timeout": 30,  # 30 seconds
        "pool_recycle": 1800,  # 30 minutes
    }

def init_tcp_connection_engine(db_config):    
    db_user = "myUser"
    db_pass = "myPassword"
    db_name = "myDBname"
    db_hostname = "127.0.0.1"
    db_port = 5432   

    pool = sqlalchemy.create_engine(
        # Equivalent URL:
        # postgresql+pg8000://<db_user>:<db_pass>@<db_host>:<db_port>/<db_name>
        sqlalchemy.engine.url.URL.create(
            drivername="postgresql+pg8000",
            username=db_user,  # e.g. "my-database-user"
            password=db_pass,  # e.g. "my-database-password"
            host=db_hostname,  # e.g. "127.0.0.1"
            port=db_port,  # e.g. 5432
            database=db_name  # e.g. "my-database-name"
        ),
        **db_config
    )
    # [END cloud_sql_postgres_sqlalchemy_create_tcp]
    pool.dialect.description_encoding = None
    return pool

def main():
    db = init_tcp_connection_engine(db_config)
    with db.connect() as conn:
        rows = conn.execute("SELECT * FROM MyTable;").fetchall()
        for row in rows:
            print(row)
    
if __name__ == "__main__":
    main()

I get the error of

Exception has occurred: ProgrammingError       (note: full exception trace is shown but execution is paused at: <module>)
(pg8000.dbapi.ProgrammingError) {'S': 'FATAL', 'V': 'FATAL', 'C': '28P01', 'M': 'password authentication failed for user "myUser"', 'F': 'auth.c', 'L': '347', 'R': 'auth_failed'}
(Background on this error at: https://sqlalche.me/e/14/f405)

Any idea what is wrong and how I can resolve this?

我通过 webUI 更改了密码,然后将其粘贴到代码中,并且成功了。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM