SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы
Список вопросов ПечатьМетки: python flask sqlalchemy json-rpc
| RemiZOffAlex Создано: 2018-06-27 11:19:00.967504 Обновлено: 2018-06-27 11:19:00.967504 |
|---|
|
Суть сводится к тому, что удаление элемента напрямую сопровождается полной потерей этого элемента. Но, если создать отдельное поле или отдельную таблицу удаляемых элементов (как в представленном примере), можно восстановить элемент позднее или удалить безвозвратно автоматическим сборщиком мусора (например спустя месяц, если элемент не был востребован) Примечание: Приведён частичный код Структура базы данных
import datetime
from sqlalchemy import Table, Column, Integer, ForeignKey, String, DateTime
from sqlalchemy.orm import relationship
from . import Base
class Note(Base):
"""
Заметки
"""
__tablename__ = "note"
id = Column(Integer, primary_key=True)
title = Column(String)
text = Column(String, default='')
created = Column(DateTime)
updated = Column(DateTime)
# Связи
trash = relationship(
"TrashNote",
primaryjoin="TrashNote.note_id==Note.id",
uselist=False
)
def __init__(self, title):
self.title = title
self.created = datetime.datetime.utcnow()
self.updated = datetime.datetime.utcnow()
class TrashNote(Base):
"""
Корзина для заметок
"""
__tablename__ = "trashnote"
id = Column(Integer, primary_key=True)
# ID заметки
note_id = Column(Integer, ForeignKey('note.id'))
# Дата удаления
created = Column(DateTime)
# Связи
page = relationship("Note", primaryjoin="TrashNote.note_id==Note.id")
def __init__(self, note):
self.note_id = note.id
self.created = datetime.datetime.utcnow()
Вызов процедуры удаления
from . import jsonrpc
from .. import models
@jsonrpc.method('note.delete')
def note_delete(id):
note = models.db_session.query(
models.Note
).filter(
models.Note.id==id
).first()
if note is None:
raise ValueError
if note.trash:
raise ValueError
new_crumple = models.TrashNote(
note
)
models.db_session.add(new_crumple)
models.db_session.commit()
return 'Заметка {} удалена'.format(id)
|