Как отобразить содержимое и структуру объекта GAE Query? - PullRequest
0 голосов
/ 22 марта 2011

Я хочу распечатать структуру объекта Query, аналогично тому, как вы можете распечатать содержимое dict или списка в интерактивной подсказке Python.Я обнаружил, что мне трудно визуализировать, как выглядят структуры данных, что, конечно, значительно затрудняет передачу аргументов шаблона.

Например, вот очень простой класс базы данных UserProfile, и я пытаюсьраспечатать все профили и содержимое второго профиля.

from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.api import users
from google.appengine.ext.webapp.util import run_wsgi_app

class UserProfile(db.Model):
    user = db.UserProperty(auto_current_user_add=True)
    name = db.StringProperty()

class TestHandlerBasic(webapp.RequestHandler):
    def get(self):
        profiles = UserProfile.all()
        self.response.out.write('The whole profiles: ')
        self.response.out.write(profiles)
        self.response.out.write('<p>')
        self.response.out.write('Now, print out all profiles: <p>')
        for profile in profiles:
            self.response.out.write(profile.user)
            self.response.out.write('<br>')
        self.response.out.write('<p>')
        self.response.out.write('There are this many profiles: ')
        self.response.out.write(profiles.count())
        self.response.out.write('<p>This is the second profile profiles[1]: ')
        self.response.out.write(profiles[1])
        return

application = webapp.WSGIApplication([(r'/testbasic', TestHandlerBasic),] debug=True)

Я получаю такой вывод:

Целые профили:

Теперь,распечатайте все профили:

test@example.com
ard@example.com

Есть много профилей: 2

Это вторые профили профилей [1]:

После первой строки я получаю <google.appengine.ext.db.Query object at 0x490bd10> и последнюю строку, а также <models.UserProfile object at 0x490bb90>.Итак, как мне распечатать дамп объекта Query или модели?

1 Ответ

3 голосов
/ 22 марта 2011

Объекты запросов сами по себе не содержат никаких сущностей db.Model, которые они возвращают get() или fetch().Поэтому вам придется переключить UserProfile.all() на что-то вроде:

profiles = UserProfile.all().fetch(1000)

Лично мне нравится создавать подкласс класса db.Model и добавлять несколько удобств для сериализации моих моделей.Я делаю это главным образом, чтобы получить быстрые представления сущностей в JSON, но это также очень удобно для их дампирования / проверки.

Вот пример моего BaseModel расширения, которое добавляет __dict__ и__json__ методы для сущностей.Если вы также добавили __repr__, который выдает метод __dict__, вы можете улучшить строковое представление сущностей при их выводе на консоль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...