# #postgresql #google-app-engine #flask #psycopg2 #google-cloud-sql
Вопрос:
Я пытаюсь подключиться к Google Cloud SQL Postgres с помощью psycopg2.
Я создал экземпляр PostgreSQL и на данный момент использую базу postgres
данных по умолчанию. Я могу подключиться с помощью инструмента pgadmin, а также из оболочки gcloud, и запросы дают ожидаемый результат.
Я разработал приложение flask и развернул его на стандартном движке приложений.
conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = "/cloudsql/my-new-db")
И когда я запускаю его, появляется psycopg2.OperationalError: could not connect to server: No such file or directory
ошибка get.
У меня есть предчувствие, что значение хоста неверно. Я пробовал различные варианты, такие как /cloudsql/<prj-name>.<region>.<db-instance-name>
Но, похоже, ничего не работает. Что еще я должен сделать, чтобы устранить эту ошибку?
Ответ №1:
Как упоминалось в этой статье о подключении к облачному SQL из 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]
Комментарии:
1. Я использую модуль psycopg2, а не ORM sqlalchemy. Можете ли вы помочь мне с модулем psycopg2?
2. Путь к сокету UNIX одинаков, независимо от того, используете ли вы sqlalchemy или psycopg2.
3. опубликовал свое решение в качестве ответа
Ответ №2:
на вашем сервере flask обязательно установите библиотеку psycopg2 (установите pip или используйте apt-get install). Я прикрепил небольшой фрагмент кода, который у меня есть для успешного подключения к моей базе данных Postgres, и, возможно, это каким-то образом поможет. Я заметил, что у вас не указан порт.
connection = psycopg2.connect(
user = 'userName',
password = password,
host = 'some ip here',
port = '5432',
database = 'db name here'
)
Хост в моем случае-это IP-адрес сервера, на который перенаправлен порт для доступа к моему серверу flask. Я не уверен, каким способом вы получаете доступ к своему хосту. Мой API и база данных flask фактически размещены на отдельных виртуальных машинах в облаке Google. Я надеюсь, что это вообще помогло, если это не так, возможно, можно было бы предоставить больше контекста, и я мог бы посмотреть на это подробнее.
Ответ №3:
unix_socket = '/cloudsql/{}'.format("my-project-id:us-central1:my-db-name")
conn = psycopg2.connect(database="postgres", user = "postgres", password = "password", host = unix_socket)
Это сработало для меня.