примеры CRUD ORM Django SQLAlchemy FastApi Python
Создано: 16 февраля 2025Автор: Егор Астапов43 просмотраСложность: легкий
Покажу вам примеры CRUD для ORM Django и ORM SQLAlchemy FastApi Python. Вы должны легко работать с данными в реляционной базе данных. ORM превращает ООП код в чистый SQL-запрос.
Пример CRUD с использованием Django ORM
1. Модель:
from django.db import models
class Item(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
2. Создание (Create):
def create_item(name, description):
item = Item.objects.create(name=name, description=description)
return item
3. Чтение (Read):
def get_item(item_id):
return Item.objects.get(id=item_id)
def get_all_items():
return Item.objects.all()
Обновление (Update):
def update_item(item_id, name=None, description=None):
item = Item.objects.get(id=item_id)
if name:
item.name = name
if description:
item.description = description
item.save()
return item
Удаление (Delete):
def delete_item(item_id):
item = Item.objects.get(id=item_id)
item.delete()
Пример CRUD с использованием FastAPI и SQLAlchemy
1. Модель:
from sqlalchemy import Column, Integer, String, Text
from database import Base
class Item(Base):
__tablename__ = 'items'
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
description = Column(Text)
2. Создание (Create):
from sqlalchemy.orm import Session
def create_item(db: Session, name: str, description: str):
item = Item(name=name, description=description)
db.add(item)
db.commit()
db.refresh(item)
return item
3. Чтение (Read):
def get_item(db: Session, item_id: int):
return db.query(Item).filter(Item.id == item_id).first()
def get_all_items(db: Session):
return db.query(Item).all()
4. Обновление (Update):
def update_item(db: Session, item_id: int, name: str = None, description: str = None):
item = db.query(Item).filter(Item.id == item_id).first()
if name:
item.name = name
if description:
item.description = description
db.commit()
db.refresh(item)
return item
5. Удаление (Delete):
def delete_item(db: Session, item_id: int):
item = db.query(Item).filter(Item.id == item_id).first()
db.delete(item)
db.commit()
Использование CRUD методов в FastAPI
Вот как вы можете использовать CRUD функции в FastAPI:
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from database import SessionLocal, engine
app = FastAPI()
# Dependency
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/items/")
def create_item(name: str, description: str, db: Session = Depends(get_db)):
return create_item(db=db, name=name, description=description)
@app.get("/items/{item_id}")
def read_item(item_id: int, db: Session = Depends(get_db)):
item = get_item(db=db, item_id=item_id)
if item is None:
raise HTTPException(status_code=404, detail="Item not found")
return item
@app.put("/items/{item_id}")
def update_item(item_id: int, name: str = None, description: str = None, db: Session = Depends(get_db)):
item = update_item(db=db, item_id=item_id, name=name, description=description)
if item is None:
raise HTTPException(status_code=404, detail="Item not found")
return item
@app.delete("/items/{item_id}")
def delete_item(item_id: int, db: Session = Depends(get_db)):
delete_item(db=db, item_id=item_id)
return {"detail": "Item deleted"}
Тут используется генератор yield. Он закрывает соединение после запроса ORM. Вы можете импортировать методы для роутов из другого файла если вы хотите отделить методы CRUD от эндпоинтов. Теперь у вас есть примеры CRUD операций с использованием Django ORM и FastAPI с ORM SQLAlchemy. Вы можете адаптировать их под свои нужды!