training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

примеры 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. Вы можете адаптировать их под свои нужды!

Комментарии

реклама