Функция поиска sqlalchemy на столе, как classmethod? - PullRequest
5 голосов
/ 20 января 2012

Предполагая, что у меня есть класс, который называется Customer, который определен в sqlalchemy для представления таблицы клиентов.Я хочу написать метод поиска, чтобы ...

results = Customer.search(query)

возвращал результаты, основанные на методе.Я хочу сделать это как @classmethod?

@classmethod
def search(cls,query):
    #do some stuff
    return results

Могу ли я использовать cls вместо DBSession.query?

DBSession.query(Customer).filter(...)
cls.query(Customer).filter(...)

Ответы [ 2 ]

9 голосов
/ 04 апреля 2012

Для использования

cls.query

Вы должны присвоить query_property классам моделей!

Возможно, вы захотите использовать это и в других классах модели, так что вы можете сделать это в базовом классе вашей модели где-нибудь в вашем model/__init__.py:

Base.query = Session.query_property()

Тогда вы можете просто написать:

cls.query.filter(...)

Обратите внимание, что вы больше не указываете объект для запроса, это автоматически выполняется с помощью механизма query_property.

6 голосов
/ 20 января 2012

Я только недавно написал похожий код, следуя этой ссылке .

class Users(Base):
    __tablename__ = 'users'

    @classmethod
    def by_id(cls, userid):
        return Session.query(Users).filter(Users.id==userid).first()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...