@DannYLook
Программист

Ошибка при подключение к PostgreSQL в Docker через Python psycopg2. В чем проблема?

Приветствую! Я пользуюсь библиотекой psycopg2 во внутри Docker. В Docker установлен postgres. При запуске база данных создается, но выводиться ошибка при подключение через python:
app-1    | [INFO] Error while working with PostgreSQL connection to server at "db_auth" (172.18.0.3), port 5432 failed: FATAL:  password authentication failed for user "admin"

А потом еще:
app-1    | 
app-1    | Traceback (most recent call last):
app-1    |   File "/app/main.py", line 24, in <module>
app-1    |     if connection: # Завершение работы базы данных
app-1    |        ^^^^^^^^^^
app-1    | NameError: name 'connection' is not defined
app-1 exited with code 1

Код. Main:
import psycopg2
from config import host, user, password, db_name, port
import time

time.sleep(10)
try:
  connection = psycopg2.connect(
    host=host,
    user=user,
    password=password,
    database=db_name,
    port=port
  )
  
  with connection.cursor() as cursor:
    cursor.execute(
      "SELECT version();"
    )
    print(cursor.fetchone())
  
except Exception as _ex:
  print("[INFO] Error while working with PostgreSQL", _ex)
finally:
  if connection: # Завершение работы базы данных
    connection.close()
    print("Завершение работы базы данных")

config:
host = "db_auth"
password = "root"
user = "admin"
port = 5432
db_name = "postgres"

docker-compose.yml:
services:
  app:
    build: ./app


  db_auth:
    container_name: db_auth
    ports:
      - "5432"
    environment:
      - POSTGRES_PASSWORD=root
      - POSTGRES_USER=admin
      - POSTGRES_DB=postgres
    image: postgres:12.22


Буду рад за любую помощь!
  • Вопрос задан
  • 137 просмотров
Решения вопроса 2
Lord_of_Rings
@Lord_of_Rings
Северный странник. Злой, но добрый
У вас неправильный пароль. Введите правильный пароль и все ошибки уйдут.
Ну и это
finally:
  if connection: # Завершение работы базы данных
    connection.close()
    print("Завершение работы базы данных")
замените на это
else:
  if connection: # Завершение работы базы данных
    connection.close()
    print("Завершение работы базы данных")

Так как блок finally выполняется в любом случае, а else только если не возникло исключения.
Ответ написан
@DannYLook Автор вопроса
Программист
Надо удалить images и запустить снова. Что бы создался новый пароль.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
1. ты текст ошибки пробовал перевести?
2.
А потом еще: NameError: name 'connection' is not defined
а это говорит про проблему твоих базовых знаний python
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы