2013-07-13 2 views
0

Я пишу довольно простое веб-приложение, основанное на Google Application Engine. Это первый раз, когда я работаю с Python и хранилищем данных Google.GqlQuery возвращает случайные результаты

Приложение должно отображать некоторые вопросы на своей домашней странице. Эти вопросы хранятся в таблице с именем «Вопрос».

class Question(db.Model): 
    question_id = db.IntegerProperty() 
    question = db.StringProperty() 

Следующий код выбирает все записи этой таблицы и фиксирует данные в шаблоне.

questions = db.GqlQuery('SELECT * FROM Question ORDER BY question_id') 

# debugging loop 
for question in questions: 
    logging.info(questions.question_id) 

template_values = { 
    'questions' : questions 
} 

И, наконец, шаблон отображает вопросы по index.html.

{% for question in questions %} 
    // HTML-CODE 
    {{ question.question }} 
    // HTML-CODE 
{% endfor %} 

На самом деле эти (очень простые) операции работают хорошо, но программа пропускает или добавляет вопросы в список дважды. Это происходит совершенно случайно. Я даже думал, что это может исчезнуть, когда оно не появилось часами. Ошибка должна произойти сразу после оператора GqlQuery, поскольку цикл отладки уже указывает на неправильные идентификаторы.

Какой вопрос пропущен или добавлен случайным образом, я не вижу здесь шаблона. Единственное, что это либо один вопрос больше или меньше, чем ожидалось. Никогда не кажется, что один вопрос пропускается, а другой добавляется дважды в одно и то же время. В таблице Question есть только пять записей на данный момент, поэтому это очень удобно.

Надеюсь, это не просто результат моего отсутствия опыта. Я провел дни по этому вопросу.

Заранее спасибо.

ответ

0

Если вы добавляете или удаляете вопросы в другом месте вашего кода, это может привести к по-видимому ошибочному поведению. По умолчанию запросы App Engine «в конечном итоге согласованы», что означает, что запрос не сразу отражает истинное состояние хранилища данных. Вы можете больше узнать о последовательности запросов в https://developers.google.com/appengine/docs/python/datastore/queries#Python_Data_consistency.

Как говорится в статье, запросы предков сильно согласованы. Для этого вам нужно будет поместить все ваши вопросы в одну и ту же «группу сущностей». Это легко сделать, но это обязательно вводит точку затухания, и это ограничит скорость, с которой вы можете создавать или изменять Вопросы. Было бы уместно, если бы вы знали, что вопросы будут редко меняться, даже если на вашем сайте было огромное количество пользователей.

Если вы не думаете, что это проблема, которую вы видите, можете ли вы опубликовать более подробную информацию о том, как вопросы создаются/изменяются/удаляются в приложении?

Смежные вопросы