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

时间:2014-05-19 16:22:25

标签: flask flask-sqlalchemy code-structure

我在Flask应用程序中可以重复使用SQLAlchemy查询,但我不知道放置它们的最佳位置。

当阅读basic tutorials时,如何创建基本的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-Tutorial中,作者似乎完全满足于将简单查询作为其观点的一部分。

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

那么我应该把它们放在哪里?在“普通”MVC实现中,我将它放入模型类中。这是Flask的正确方法吗?或查询属于更接近视图?我应该创建一个单独的模块吗?或者没有最佳实践可以遵循这里?

1 个答案:

答案 0 :(得分:1)

对于后人:我最终将大部分查询逻辑作为类方法放在模型类中。

问题中的玩具博客课程最终会像这样结束:

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()

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