繁体   English   中英

如何以及在何处删除 Flask - SQLAlchemy 中的行

[英]How and where do I delete rows in Flask - SQLAlchemy

我正在使用 flask 和 flask-SQLAlchemy(使用 sqlite3 和 python 3.8)构建一个项目。 我有models.py,其中包含数据库的所有表,并且我想要删除Articles 表中的行的static 方法取决于它们的属性之一。

我想在模型 class 中编写这个函数,并想问这是否可以。 function 看起来像:

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) 的事情)。 我删除文章的方式好吗? 这个 function 的位置可以在 models.py 文件中吗?

根据我的经验,这里一切都很好。 作为一般规则,您应该将您的应用程序设计为:

  1. 模型应该做最强大的事情
  2. 视图应该只执行逻辑工作
  3. 模板应该是愚蠢的。 他们应该只渲染东西。

现在说上面我的意思是说所有与数据库操作相关的东西都应该在模型中。 就像你正在做的那样。 大多数情况下,数据库的所有事务都是简单的事务,可以用 ORM 用几行代码编写。 但有时如果你觉得某事需要一遍又一遍地完成,或者你觉得有一种方法可以做大事。 那么最好只在你的模型中使用它。 您提到的方法应该是您文章 model 的一部分。 model 中的其他内容可能是向用户发送电子邮件或其他一些日常任务等操作。

就你的观点而言。 他们应该执行所有合乎逻辑的事情。 您的业务逻辑基本上是由视图实现的。

最后,模板应该负责渲染视图提供给它们的任何东西。

显然没有这样的硬性规定。 上述情况可能有例外。 或者有人可以找到比我提到的更好的其他方式来做事。 为此,您需要使用自己的良心,没有人可以教您。 它带有经验。

请通过以下文章 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/

也只是一个小建议。 虽然我不清楚你的要求。 但是,如果您可以在for 循环之后提交,即在方法的最后提交,那会更好。 一个请求通常应该只有一个提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM