我需要将Mysql数据库连接到FastAPI。MySQL使用自定义端口(17001)。我还需要使用docker-compose。
数据库:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DB_USER = 'api'
DB_PASSWORD = 'test'
DB_HOST = '127.0.0.1'
DATABASE = 'main'
DB_PORT = 17001
connect_uri = f'mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DATABASE}'
engine = create_engine(connect_uri)
Base = declarative_base()
from . import Models
Base.metadata.create_all(bind=engine)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
Docker-compose:
version: "3.8"
services:
database:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: "main"
MYSQL_ROOT_PASSWORD: "test"
MYSQL_USER: "api"
MYSQL_PASSWORD: "test"
MYSQL_TCP_PORT: 17001
ports:
- "17001:17001"
volumes:
- ./MySQLData:/var/lib/mysql
networks:
- main
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:17001"]
interval: 10s
timeout: 10s
retries: 10
api:
restart: on-failure
build:
dockerfile: ./api/Dockerfile
volumes:
- type: bind
source: ./api
target: /app
ports:
- 17002:17002
depends_on:
database:
condition: service_healthy
networks:
- main
networks:
main:
./api/Dockerfile
:
FROM python:3.9
WORKDIR /code
COPY ./api/requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./api /code/app
CMD ["python3", "/code/app/Main.py"]
当我使用docker compose up
运行时,我得到了这个错误:
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")
当我使用docker compose运行MySQL时,然后我手动运行API,一切正常。
如何解决此问题?
1条答案
按热度按时间jv4diomz1#
我已经忘记了--建造。为了运行,我使用
docker compose up --build
。感谢@python_user和@AndrewNolan的帮助