“psycopg2.OperationalError” - 我通过 pgadmin 连接没有任何问题,并通过 psycopg2

问题描述 投票:0回答:1

容器部署在docker中。我尝试了不同的方法,没有任何帮助。可能是什么问题呢?外部因素会造成问题吗?

services:
    db:
      container_name: "db"
      image: postgres:14.1-alpine
      restart: always
      environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
          - POSTGRES_DB=postgres
          - POSTGRES_PORT=5432
          - POSTGRES_HOST=db
          - POSTGRES_HOST_AUTH_METHOD=trust
          - PGDATA=/var/lib/postgresql/data/pgdata
      ports:
          - "5432:5432"
      networks:
          - custom
db_name = 'postgres'
db_user = 'postgres'
db_password = 'postgres'
db_host = 'db'

conn =psycopg2.connect(dbname=db_name, user=db_user, password=db_password, host=db_host)

我试过了

import psycopg2

# Параметры подключения к базе данных PostgreSQL
db_name = 'postgres'
db_user = 'postgres'
db_password = 'postgres'
db_host = 'db'

conn =psycopg2.connect(dbname=db_name, user=db_user, password=db_password, host=db_host)

# Создание курсора для выполнения SQL запросов
cursor = conn.cursor()

# Пример выполнения запроса SELECT
cursor.execute("SELECT * FROM users")

# Получение результатов запроса
rows = cursor.fetchall()

# Вывод результатов
for row in rows:
    print(row)

# Закрытие курсора и соединения
cursor.close()
conn.close()

结果

Traceback (most recent call last):
  File "c:\Мои проекты\pythonProject\db\conect.py", line 48, in <module>
    conn =psycopg2.connect(dbname=db_name, user=db_user, password=db_password, host=db_host)
  File "C:\Мои проекты\pythonProject\.venv\lib\site-packages\psycopg2\__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)       
psycopg2.OperationalError

没有延迟,这是最烦人的。我将非常感激。

python postgresql sqlalchemy psycopg2
1个回答
0
投票

就像其他人已经说过的那样,

db
可以(并且应该)仅在容器间通信中用作主机名,它在主机上作为容器主机名不可见。

相反,当从主机连接到数据库容器时,您可以使用

localhost
。这就是为什么还需要
ports
部分,您将端口
5432
发布到主机外部可用。这确实是这里的常见做法。

更好的是使用

"127.0.0.1:5432:5432"
将其真正发布到本地主机。目前它也在您的主机外部开放。

© www.soinside.com 2019 - 2024. All rights reserved.