我想将Flask后端与Postgres数据库连接,两者都在单独的Docker容器中运行。每次我尝试运行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"]
app.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")
我该怎么办才能解决该错误?