最佳实践:可重复使用的查询应该放在哪里



我在Flask应用程序中有可重复使用的SQLAlchemy查询,但我不知道把它们放在哪里最好。

更长

当阅读基本教程时,如何创建基本的SQLAlchemy模型变得非常清楚,比如这篇代表博客文章的文章:

class Blog(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.Text())
    body = db.Column(db.Text())
    date = db.Column(db.Date())

以及如何执行查询,例如按日期获取博客文章:

Blog.query.order_by(Blog.date.desc()).all()

但是这些示例经常显示为Python控制台命令,而不是在应用程序的上下文中。在Flask Mega教程中,作者似乎完全满足于将简单的查询作为其观点的一部分。

但是,如果我们处理复杂和/或可重复使用的查询语句,将它们放在几个视图的中间会很快变得很难看。

那么我应该把它们放在哪里呢?在";正常的";MVC实现我会把它放在模型类中。在弗拉斯克这样做对吗?或者查询是否更接近视图?我应该创建一个单独的模块吗?还是这里没有最佳实践可供遵循?

为了子孙后代:我最终将大部分查询逻辑作为类方法放置在模型类中。

这个问题中的玩具博客类最终会是这样的:

class Blog(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.Text())
    body = db.Column(db.Text())
    date = db.Column(db.Date())
    @classmethod
    def get_by_date(cls):
        return cls.query.order_by(cls.date.desc()).all()

我还没有遇到这种方法的问题(值得一提(。

相关内容

  • 没有找到相关文章

最新更新