Общий метод запроса на основе объекта из его модельного класса - PullRequest
0 голосов
/ 12 февраля 2019

В моем модельном классе я хочу создать универсальный метод, скажем get_list(obj), который принимает аргумент своего объекта, который содержит значения их соответствующего атрибута, и возвращает все соответствующие записи, которые соответствуют соответствующему столбцу.

Предположим, у меня есть класс пользователей в моей модели, и я использую метод get_list(obj).Мне просто нужно передать объект пользователям с его значениями.Очевидно, это сэкономит много времени вместо создания повторяющихся filter_by().

class Users(db.Model):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
    username = Column(String(200), nullable=False)
    password = Column(String(200))
    email = Column(String(200), nullable=False, unique=True)

    def as_query(self):
        query = []
        for c in self.__table__.columns:
            if getattr(self, c.name) is not None:
                query.append(c.name+'='+str(getattr(self, c.name)))
        return ' and '.join(query)

    @classmethod
    def get_list(cls, statement):
        return cls.query.filter_by(statement).all()

. Чтобы использовать этот метод, мы можем ожидать что-то более похожее на

    user = Users(username='admin')
    results = Users.get_list(user.as_query()) # result as a list

I'mПомните, что мы можем достичь того же, просто записав запрос в filter_by вместо создания бессмысленного объекта.Однако в одном из моих API объект будет создан автоматически, то есть он будет автоматически «на лету».

Однако это решение - всего лишь взлом, чтобы просто сгладить атрибут и его значение в операторе filter_by()и явно не работает?У вас есть лучшее решение для этого?

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