我有一个连接到postgresql并写入数据的python代码。然而,当我将其容器化时,python代码无法连接到postgresql。下面是代码:
import pandas as pd
from sqlalchemy import create_engine
import sqlalchemy
username = 'user1'
password = '12345'
host_name = 'pgdatabase'
port = '5433'
database_name = 'traindb'
engine = create_engine(f'postgresql://{username}:{password}@{host_name}:{port}/{database_name}')
df=pd.read_csv("iris.csv")
df.to_sql(name='cleandata', con=engine, index=False, if_exists='replace')
YAML代码如下:
version: '3'
services:
pgdatabase:
container_name: pgdatabase
image: postgres:12-bullseye
environment:
- POSTGRES_USER=user1
- POSTGRES_PASSWORD=12345
- POSTGRES_DB=traindb
networks:
- postgres_network
volumes:
- "./pg_data:/var/lib/postgresql/data:rw"
ports:
- "5433:5432"
cleandata:
build: "."
networks:
- postgres_network
depends_on:
- pgdatabase
networks:
postgres_network:
external: false
请帮我解决我的问题。
收到的错误为“psycopg2.OperationalError:无法连接到服务器:连接被拒绝”。
1条答案
按热度按时间5uzkadbs1#
您正在使用服务名称作为数据库的
hostname
,但数据库在内部侦听端口5432
。因此,您必须使用pgdatabase:5432
或localhost:5433
(因为您已经将端口5432
从容器转发到主机上的5433
)。如果使用服务名称,则必须使用容器所暴露的“实际”端口。如果转发该端口,则可以将
localhost
沿着使用。希望你能理解。