2013-08-16 3 views
0

У меня есть таблица, в которой один из столбцов содержит список. Я хочу знать, можно ли выбрать все строки, в которых список содержит определенный элемент.Google App Engine: IN фильтр и позиция аргумента

Более конкретно, у меня есть столбец guests, содержащий список строк, и я хочу знать, является ли конкретная строка guest частью этого списка. Я хотел бы написать такой запрос:

q = TableName.gql('WHERE :g IN guests', g=guest) 

Кажется, однако, что я не могу поместить переменные в этом положении. Например, этот запрос (где OwnerId является строка, а не список строк) также запрещено:

q = TableName.gql('WHERE :g = ownerid', g=guest) 

Кажется, я должен написать это так:

q = TableName.gql('WHERE ownerid = :g', g=guest) 

Таким образом, у меня есть следующие вопросы:

  1. Как я могу построить запрос, который получает строки, в которых ячейка списка содержит определенный член?
  2. Аргументы для запросов GQL ограничены правой частью операторов? Что такое ограничение?

Я использую Google App Engine с Python 2.7. Благодаря!

ответ

2

Вы неправильно поняли, что такое оператор IN. Это не для запроса на повторное поле: для этого вы просто используете обычный =. IN предназначен для запроса списка значений: например, guest IN [1, 2, 3, 4]. Ваш запрос должен быть:

q = TableName.gql('WHERE guests = :g', g=guest) 

или лучше, так как GQL не даст вам ничего, что стандартный синтаксис DB не делает:

q = TableName.all().filter('guests =', guest)