Не можете "определить" две базы данных в одном и том же файле Python? - PullRequest
1 голос
/ 18 ноября 2010

Я только начал изучать Python и постепенно осваиваю его, но столкнулся с проблемой.

Я пытаюсь сделать простой сайт со статьями, используя Google Launcher SDK Google.

Теперь все работало нормально, когда я следовал небольшому руководству на сайте Google, но теперь я хочу создать другую базу данных:

class Articles(db.Model):
    title = db.TextProperty()
    content = db.StringProperty(multiline=True)
    date = db.DateTimeProperty(auto_now_add=True)

Здесь нет ошибок. Затем я пытаюсь сделать запрос, получить всю информацию и отправить ее в шаблон:

class Articles(webapp.RequestHandler):
    def get(self):
        articles_query = Articles.all().order('-date')
        articles = articles_query.fetch(10)

        template_values = {'articles': articles}

        path = os.path.join(os.path.dirname(__file__), 'articles.html')
        self.response.out.write(template.render(path, template_values)) 

Здесь я получил ошибку:

line 45, in get
    articles_query = Articles.all().order('-date')
AttributeError: type object 'Articles' has no attribute 'all'

Я в основном скопировал запрос из учебника Google и просто изменил переменные, но он не работает.

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 18 ноября 2010

Дело не в том, что вы определили две базы данных, а в том, что вы пытались создать два класса с именем Articles.Python не может держать их обоих в своей голове сразу, поэтому после того, как вы сделали class Articles(webapp.RequestHandler), он заменил class Articles(db.Model).

webapp.RequestHandler не имеет метода all(), и вы 'не определен во втором Articles классе.Вот почему вы получаете конкретную ошибку, которую делаете.

Вы должны использовать разные имена для своих классов.

2 голосов
/ 18 ноября 2010

Я бы осуществил рефакторинг таким образом *:

  1. переименование class Articles(webapp.RequestHandler) в class ArticlesHandler(webapp.RequestHandler)

  2. ходвашу Articles модель в отдельном файле с именем models.py

  3. добавьте from models import Articles в ваш веб-обработчик файл

Наличие суффикса Handler поможет вам отличить канонические классы от веб-обработчиков;другой модуль models.py изолирует ваши реализации модели в одном месте и может быть полезен, когда ваш проект станет более сложным.

* шаг 1 достаточно для решения вашей конкретной проблемы

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