В чем здесь проблема с внедрением зависимости? Почему здесь нужен параметр запроса?
GetSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
@app.post('/blog', status_code=201)
def create(request: BlogModel, session: Session = Depends(dependency=db.GetSessionLocal)):
new_blog = db.BlogMap(title=request.title, body=request.body)
session.add(new_blog)
session.commit()
session.refresh(instance=new_blog)
return new_blog
Я же внедрил зависимость Depends, а не query param, почему нужен какой-то local_kw?
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
На основе примеров с официального сайта FastAPI: SQL (Relational) Databases
Нужно создать отдельную функцию, которая будет вызывать GetSessionLocal() (в официальной документации SessionLocal) и передавать наружу через yield. Эту функцию уже нужно указать как зависимость через параметры:
# Копипаста частей примеров из документации
from sqlalchemy.orm import sessionmaker
...
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = crud.get_user_by_email(db, email=user.email)
if db_user:
raise HTTPException(status_code=400, detail="Email already registered")
return crud.create_user(db=db, user=user)
На вашем коде (имена переменных и функций поменял под свое видение, так же я бы поменял GetSessionLocal просто на SessionLocal):
def get_session_local():
session = db.GetSessionLocal()
try:
yield session
finally:
session.close()
@app.post('/blog', status_code=201)
def create(request: BlogModel, session: Session = Depends(dependency=get_session_local)):
new_blog = db.BlogMap(title=request.title, body=request.body)
session.add(new_blog)
session.commit()
session.refresh(instance=new_blog)
return new_blog
