sqlalchemy получить вопрос об атрибуте модели

1

Мои фильтры поступают через get params следующим образом: filterName = 'email', filterValue = 'john @', и мне нужно построить мой запрос на основе них.

Если я пытаюсь использовать rows.filter( getattr( self.model, filterName ).like( filterValue + '%' ) ), я получаю сообщение об ошибке: AttributeError: 'NoneType' object has no attribute 'like'

Поскольку параметры моей модели и фильтра приходят через GET, важно, чтобы я реализовал исправление для этого. Как бы вы предложили?

  • 1
    Похоже, что это должно работать до тех пор, пока вы ранее не присвоили атрибут «email» классу модели (со значением None). Есть ли другое место, где это могло бы произойти?
  • 0
    Если я использую rows.filter( User.email.like( filterValue + '%' ) ) он работает, даже если в то время значение User.email имеет значение None, но rows.filter( getattr( self.model, filterName ).like( filterValue + '%' ) ) не удается
Показать ещё 5 комментариев
Теги:
sqlalchemy

1 ответ

0

Вы не показываете, что такое self/self.model. Обычно это будет имя класса.

Итак, если у вас есть модель User

field = 'id'
field_val = 3
qry = Session.query(User).filter(getattr(User, field) == field_val)

должен отлично работать.

Вы не используете getattr из экземпляра (self), но из самого класса.

  • 0
    это работает. как насчет метода like (), который должен быть присоединен к getattr(User, field).like() . тогда вы получите AttributeError: 'NoneType' object has no attribute 'like'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню