python - 如何将 Flask 与在 Docker 容器中运行的 Postgres 连接起来?
问题描述
我想将 Flask 后端与在单独的 docker 容器中运行的 Postgres 数据库连接起来。每次我尝试运行 app.py 时,都会出现错误提示
ModuleNotFoundError:没有名为“psycopg2”的模块
我只想保存一些我得到的结果作为神经网络的输出。
这是我的 docker-compose.yml:
version: "3.5"
services:
react-dev:
container_name: 'frontend_container'
build:
context: ./ta_frontend
dockerfile: Dockerfile
volumes:
- './ta_frontend:/usr/src/app'
- '/usr/src/app/node_modules'
ports:
- '3000:3000'
environment:
- NODE_ENV=development
postgres:
image: 'postgres:11'
container_name: 'postgres_container'
ports:
- '54320:5432'
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
pgadmin:
image: 'dpage/pgadmin4'
container_name: 'pgadmin_container'
ports:
- '5050:80'
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
depends_on:
- postgres
backend:
container_name: 'backend_container'
restart: always
build: ./ta_backend
ports:
- "5000:5000"
volumes:
- ./ta_backend:/usr/src/app
volumes:
postgres-data:
后端容器的 Dockerfile:
FROM python:3.7-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app/
RUN apk update && \
apk add postgresql-libs && \
apk add --virtual .build-deps gcc musl-dev postgresql-dev && \
python -m pip install -r requirements.txt --no-cache-dir && \
apk --purge del .build-deps
EXPOSE 5000
CMD ["python", "app.py"]
应用程序.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://postgres:example@postgres_container/postgres'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class Result(db.Model):
id = db.Column('result_id', db.Integer, primary_key=True)
cars = db.Column(db.SmallInteger)
trucks = db.Column(db.SmallInteger)
busses = db.Column(db.SmallInteger)
motorcycles = db.Column(db.SmallInteger)
def __init__(self, cars, trucks, busses, motorcycles):
self.cars = cars
self.trucks = trucks
self.busses = busses
self.motorcycles = motorcycles
@app.route("/")
def hello_docker() -> str:
return "Backend listening on Port 5000."
if __name__ == "__main__":
db.create_all()
test_rec = Result(
5,
1,
1,
2
)
db.session.add(test_rec)
db.session.rollback()
db.session.commit()
app.run(debug=True, host="0.0.0.0")
我能做些什么来解决这个错误?
解决方案
推荐阅读
- java - 将“无效”值“住宅”转换为数据类型 int 时转换失败
- c++ - 显式模板实例化和一个定义规则
- python - 使用 Django for Python 进行 URL 映射时遇到问题
- c - 程序卡在 scanf
- c++ - 输出存储在堆栈中但字符串的字母顺序颠倒的字符串的最有效方法是什么?
- python - 延迟 tcp 流。即从一个套接字复制到另一个延迟 10 秒
- javascript - 如何关闭文件某些部分的 VSCode 格式
- angular - 如何管道/映射以在 Angular 7 中返回数组
- javascript - 使用 express.Router() 时如何从 HTML 表单传递用户输入
- typescript - 使用类型作为索引器