简体   繁体   中英

Connecting to Google Cloud SQL Postgres instance using psycopg2

I am trying to connect to Google Cloud SQL Postgres Using psycopg2.

I have created an postgreSQL instance and using the default database postgres for now. I am able to connect from pgadmin tool as well as from the gcloud shell and the queries give expected result.

I have developed a flask application and deploying on standard app engine.

conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = "/cloudsql/my-new-db")

And when I run it, the get psycopg2.OperationalError: could not connect to server: No such file or directory error.

I have a hunch that host value is not correct. I tried various options like /cloudsql/<prj-name>.<region>.<db-instance-name>

But, nothing seems to be working. What else should I be doing to remove this error?

As mentioned in this article on connecting to Cloud SQL from app engine:

Connecting with Unix sockets

Once correctly configured, you can connect your service to your Cloud SQL instance's Unix domain socket accessed on the environment's filesystem at the following path: /cloudsql/INSTANCE_CONNECTION_NAME.

The INSTANCE_CONNECTION_NAME can be found on the Overview page for your instance in the Google Cloud Console or by running the following command:
 
    gcloud sql instances describe [INSTANCE_NAME]

on your flask server make sure to install the psycopg2 library (pip install or use apt-get install). I have attached a small snippet of code that I have for successful connection to my Postgres database and maybe it will assist in some way. I noticed you don't have a port specified.

connection = psycopg2.connect(
   user = 'userName',
   password = password,
   host = 'some ip here',
   port = '5432',
   database = 'db name here'
)

The host in my case is the IP of the server which has a port forwarded for access to my flask server. I am not sure what way you are accessing your host. My flask API and DB are actually hosted on separate VM's within google cloud. I hope this helped at all, if it doesn't maybe more context could be provided and I could look at it more.

unix_socket = '/cloudsql/{}'.format("my-project-id:us-central1:my-db-name")

conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = unix_socket)

This worked for me.

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