psycopg2.OperationalError" - 我通过pgadmin连接没有问题,但通过psycopg2却不行
这个容器是在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
没有延迟,这真让人烦恼。我会非常感激。
1 个回答
0
正如其他人所说的,db
这个名字只能在容器之间通信时使用,并且应该这样用,因为在你的主机上是看不到这个容器的主机名的。
相反,当你从主机连接到数据库容器时,你应该使用 localhost
。这就是为什么需要 ports
部分的原因,你需要把端口 5432
发布出去,让主机可以访问。这个做法是很常见的。
更好的做法是使用 "127.0.0.1:5432:5432"
,这样就真的只把它发布到本地主机上。目前它是对外开放的,也就是说其他机器也能访问。