В моем модельном классе я хочу создать универсальный метод, скажем 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()
и явно не работает?У вас есть лучшее решение для этого?