Как и где удалить строки в Flask - SQLAlchemy - PullRequest
0 голосов
/ 09 мая 2020

Я создаю проект, используя flask и flask -SQLAlchemy (с sqlite3 и с python 3.8). У меня есть models.py, который содержит все таблицы базы данных, и я хочу иметь метод stati c, который удаляет строки в таблице статей в зависимости от одного из их атрибутов.

Я думал о написании этой функции в класс моделей и хотел спросить, нормально ли это. Функция выглядит так:

def update_articles():
    all_articles = Articles.query.all()
    for article in all_articles:
        if needs_to_be_deleted(article):
            db.session.delete(article)
            db.session.commit()

Эта функция в порядке (не обращайте внимания на вещь needs_to_be_deleted (article)). Хорошо ли удаляю статью? и может ли место для этой функции быть в файле models.py?

1 Ответ

1 голос
/ 09 мая 2020

По моему опыту, здесь все хорошо. Как правило, вы должны разрабатывать свое приложение следующим образом:

  1. Модели должны выполнять самые мощные функции
  2. Представления должны выполнять только логическую работу
  3. Шаблоны должны быть тупыми . Они должны просто отображать вещи.

Теперь, говоря вышесказанное, я хочу сказать, что все, что связано с операциями с базой данных, должно быть в моделях. Также как и вы. В большинстве случаев все транзакции с вашей базой данных простые и могут быть записаны парой строк с помощью ORM. Но иногда, если вы чувствуете, что что-то нужно делать снова и снова, или вам нужен метод для достижения чего-то большого. Тогда лучше иметь это только в ваших моделях. Упомянутый вами метод должен быть частью вашей модели статьи. Другими вещами, которые могут присутствовать в вашей модели, могут быть такие операции, как отправка электронных писем пользователям или некоторые другие рутинные задачи.

Что касается ваших представлений. Они должны выполнять все логические задачи. Логика вашего бизнеса c в основном реализуется с помощью представлений.

Наконец, шаблоны должны выполнять работу по рендерингу того, что им передается из представлений.

Очевидно, что нет таких сложных и быстрое правило. Из вышеизложенного могут быть исключения. Или кто-то может найти другой способ сделать что-то лучше, чем я упомянул. Для этого нужно использовать свою совесть, и никто не может вас этому научить. Это приходит с опытом.

Для справки, go через следующие статьи:

https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

https://flask.palletsprojects.com/en/1.1.x/tutorial/

Также вы можете использовать это, но если это не так: https://flask-marshmallow.readthedocs.io/en/latest/

Еще одно небольшое предложение. хотя я не понимаю ваших требований. Но было бы лучше, если бы вы могли зафиксировать после для l oop, т.е. в самом конце метода. В запросе обычно должна быть только одна фиксация.

...