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.