Удалить элемент из peewee Query select

У меня есть результат запроса с помощью таблицы Peewee. select (), скажем, я хочу удалить часть полученного списка (QuerySelect), как это сделать? или исключить определенные элементы из запроса?

#Edited
result = users.select();
for element in result:
   for name in list:
      if(element.name == name):
          removeThisElement()

Я хочу исключить список имен из результата запроса


person Newbie    schedule 20.05.2015    source источник
comment
Что именно вы пытаетесь сделать? Удаление этого элемента в базе данных?   -  person skyline75489    schedule 20.05.2015
comment
я не хочу удалять его из базы данных, я хочу удалить его из текущего выбранного списка. Допустим, мне не нужен определенный список пользователей, который я определил по наличию в выбранном списке, скажем, все они являются членами компании, и эти выбранные участники не авторизованы в определенном месте, как в неавторизованном списке и полном списке компании.   -  person Newbie    schedule 20.05.2015
comment
Делать это на Python действительно не имеет смысла, поскольку для этого предназначен SQL!   -  person coleifer    schedule 22.05.2015


Ответы (2)


Как сказал coleifer, поскольку вы используете peewee, используйте для этого SQL, поэтому, согласно вашему последнему редактированию, решение должно быть:

result = User.select().where(User.name.not_in(a_list_of_names))

хотя понимание списка также работает:

result = [user for user in Users.select() if user.name not in a_list_of_names]

Документация: Query.where

person lord63. j    schedule 20.05.2015
comment
это работает для одного пользователя, что удивительно, но как я могу применить это к списку? - person Newbie; 20.05.2015
comment
если бы я мог удалить определенный элемент после запроса, я бы смог исключить элементы списка, изменил пример кода - person Newbie; 20.05.2015
comment
@Новичок, попробуй result = [user for user in users.select() if user.name not in list_of_names] - person lord63. j; 20.05.2015
comment
Как насчет фильтрации нежелательного пользователя в самом запросе, например. User.select().where(User.name != 'whatever') - person coleifer; 21.05.2015
comment
@coleifer Это работает, когда вы хотите исключить определенного пользователя из запроса, но вопрос, кажется, исключает из запроса ряд пользователей. Верно? - person lord63. j; 21.05.2015
comment
Затем вы можете написать User.select().where(User.name.not_in(['name1', 'name2', 'name3'])). Я просто понятия не имею, почему вы предлагаете делать это на Python ?? - person coleifer; 22.05.2015
comment
@coleifer Ах, вчера я уже отредактировал ответ и предложил сначала использовать SQL, как и вы. - person lord63. j; 22.05.2015

Лучшим и наиболее правильным способом было бы использовать SQL для этого:

User.select().where(User.name != 'myname')

Затем полученный список предварительно фильтруется.


Если вы хотите отфильтровать список имен, вы можете написать

names_to_exclude = ['lord63', 'Newbie', 'etc']
users = User.select().where(User.name.not_in(names_to_exclude))
person coleifer    schedule 20.05.2015
comment
я хотел отфильтровать весь список, код лорда делает это - person Newbie; 21.05.2015
comment
Я обновил свой комментарий. Если вы используете ORM и SQL, с какой стати вам делать фильтрацию в Python, это то, что я пытаюсь понять? Ты действительно оправдываешь свое имя, Новичок ;) - person coleifer; 22.05.2015