use*_*842 5 postgresql sqlalchemy docker
我正在尝试使用 SQLAlchemy 与 dockerized PostgreSQL 服务器进行交互。就像是:
engine = create_engine('postgresql://user:user_password@localhost:5432/database')
df.to_sql('table', engine)
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
OperationalError: (psycopg2.OperationalError) 无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(::1) 上运行并接受端口 5432 上的 TCP/IP 连接?无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(127.0.0.1) 上运行并接受端口 5432 上的 TCP/IP 连接?
这表明 Docker postgresql(正在运行)在该端口不可用。我试过添加-p 5432:5432到我的docker-compose exec没有成功。有小费吗?
Esp*_*azi 10
由于您的 Flask 应用程序和 Postgres 图像不在同一个 docker 容器中,因此您无法通过 localhost 访问数据库!
在数据库 URL 中将localhost替换为 docker-compose/ 中 Postgres 服务的名称
engine = create_engine('postgresql://user:user_password@{}:5432/database'.format('service_name_of_postgres'))
Run Code Online (Sandbox Code Playgroud)
小智 10
大家好!让我尝试帮助您将 Flask Web 应用程序连接到 PostgreSQL 数据库,两者都运行在 Docker 上。
首先你应该安装这些 python 模块:
您应该使用pip安装它们。
psycopg2 是将 SQLAlchemy 连接到 PostgreSQL 数据库所需的 PostgreSQL 驱动程序之一。
我正在向您展示我的docker-compose.yml文件。
version: '3'
services:
web:
#YourWebServiceConfiguration
#YourWebServiceConfiguration
#YourWebServiceConfiguration
db_postgres:
image: postgres:latest
container_name: postgres_db_container
ports:
- "5432:5432"
volumes:
- postgres_db_vol:/var/lib/postgresql/data
environment:
POSTGRES_USER: yourUserDBName
POSTGRES_PASSWORD: yourUserDBPassword
POSTGRES_DB: yourDBName
Run Code Online (Sandbox Code Playgroud)
现在让我们看看我的Python代码!这是一个test.py文件。
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
conn_url = 'postgresql+psycopg2://yourUserDBName:yourUserDBPassword@yourDBDockerContainerName/yourDBName'
engine = create_engine(conn_url)
db = scoped_session(sessionmaker(bind=engine))
query_rows = db.execute("SELECT * FROM anyTableName").fetchall()
for register in query_rows:
print(f"{register.col_1_name}, {register.col_2_name}, ..., {register.col_n_name}")
# Note that this Python way of printing is available in Python3 or more!!
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多信息,可以查看以下链接。
一般数据库连接url:
dialect+driver://用户名:密码@主机:端口/数据库
如果使用 Docker,您需要替换 docker 容器名称的主机值。
我有同样的问题。经过几次尝试后,问题出现在提供给sqlalchemy.create_engine()的连接 URL字符串中
首先我和你有类似的情况:
db_URL = f"postgresql://{db_login}:{db_password}@localhost:5432/postgres"
Run Code Online (Sandbox Code Playgroud)
固定一:
db_URL = f"postgresql+psycopg2://{db_login}:{db_password}@db:5432/postgres"
Run Code Online (Sandbox Code Playgroud)
我这边同时进行两项更改的做法有点愚蠢,但我检查过,看起来问题出在localhost。将服务器地址更改为docker_compose.yml中指定的container_name应该可以解决连接问题。
db:
image: postgres:12.7-alpine
container_name: db
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6077 次 |
| 最近记录: |