/
Bareplan
/
22
Обзор
Документация
Войти
/
Bareplan
/
22
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
main.py
66 строк
2 KB
chepchik
del route
19 авг 2024, 13:43
19 авг 2024, 13:43
06e869a
Код
Авторство
О чём код?
from fastapi import FastAPI, HTTPException, Depends from pydantic import BaseModel from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, Session from sqlalchemy.exc import IntegrityError # Создание объекта FastAPI app = FastAPI() # Настройка базы данных MySQL SQLALCHEMY_DATABASE_URL = "mysql+pymysql://isp_is_test:12345@192.168.25.23/isp_is_test" engine = create_engine(SQLALCHEMY_DATABASE_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() # Определение модели SQLAlchemy для пользователя class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) name = Column(String(50), index=True) # Указываем длину для VARCHAR email = Column(String(100), unique=True, index=True) # Указываем длину для VARCHAR # Создание таблиц в базе данных Base.metadata.create_all(bind=engine) # Определение Pydantic модели для пользователя class UserCreate(BaseModel): name: str email: str class UserResponse(BaseModel): id: int name: str email: str class Config: orm_mode = True # Зависимость для получения сессии базы данных def get_db(): db = SessionLocal() try: yield db finally: db.close() def read_user(user_id: int, db: Session = Depends(get_db)): user = db.query(User).filter(User.id == user_id).first() if user is None: raise HTTPException(status_code=404, detail="User not found") return user # Маршрут для создания нового пользователя @app.post("/users/", response_model=UserResponse) def create_user(user: UserCreate, db: Session = Depends(get_db)): db_user = User(name=user.name, email=user.email) try: db.add(db_user) db.commit() db.refresh(db_user) return db_user except IntegrityError: db.rollback() raise HTTPException(status_code=400, detail="Email already registered")