简化SQLalchemy查询

时间:2016-03-11 04:02:31

标签: python sqlalchemy

SQLalchemy查询语法是详细的:

models.session.query(models.Person).filter(models.Person.first_name == 'David').all()

我已经阅读了几个指南,暗示表对象有查询方法,但无法在SQLalchemy文档中找到它,也无法在我的代码中使用它。我有什么理由不使用下面的代码吗?

class QueryMethod:
    @classmethod
    def filter(cls, *args, **kwargs):
        return session.query(cls).filter(*args, **kwargs).all()


class Person(Base, QueryMethod):
    __tablename__ = 'people'

    id = Column(Integer, primary_key=True)
    first_name = Column(String(255))

此继承允许的新查询语法:

models.Person.filter(models.Person.first_name=='David')

我的问题:是否有办法删除' models.Person'过滤方法调用中的位?

1 个答案:

答案 0 :(得分:1)

我猜您正在寻找filter_by。查询类似于

session.query(models.Person).filter_by(first_name="foo")

您使用的filter类方法会对session进行编码。我建议您明确地将会话传递给它,以便可以在不同的会话上重复使用相同的查询。