Допустим, у меня есть эти два класса:
class TeamMember(db.Entity):
member_id= PrimaryKey(int, auto=True)
name = Required(str)
team = Required('Team')
class Team(db.Entity):
team_id= PrimaryKey(int, auto=True)
name = Required(str)
team_members = Set(TeamMember)
Я хочу выбрать всех членов TeamMeber, входящих в конкретную команду (например, team_id == 1). Запрос будет выглядеть примерно так (C1):
TeamMember.select(lambda member: member.team == 1)[:]
Если я напишу это так, я получу ошибку ниже:
Incomparable types 'Team' and 'int' in expression: member.team == 1
С другой стороны, я могу написатьэто и будет работать (C2):
TeamMember.select(lambda member: member.team == Team[1])[:]
Но я не хочу писать это так, потому что я хочу создать универсальную функцию, которая будет работать для каждого класса Entity:
def get_instances_from_db(classname, classname_var, var_value):
"""
:param classname: name of class
:param classname_var: name of class variable to search by
:param var_value: value of class variable
:return:
"""
return classname.select(lambda v: getattr(v, classname_var) == var_value)[:]
Вышеописанный метод будет работать для переменной, которая не относится к другому классу Entity, например:
members = get_instances_from_db(TeamMember, "name", "some_team_member_name")
Наконец, мой вопрос: можно ли задать запрос для поиска по целому числу,а не объектом Entity. Или есть способ использовать строку 'C1'?
Надеюсь, я достаточно ясен! :)