不能在同一个Python文件中“定义”两个数据库?

时间:2010-11-18 14:17:52

标签: python google-app-engine

我刚刚开始学习Python,我正在慢慢掌握它,但我遇到了一个问题。

我正在尝试使用Google的App Launcher SDK创建一个包含文章的简单网站。

现在,当我关注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 个答案:

答案 0 :(得分:7)

并不是您已经定义了两个数据库,而是您尝试创建了两个名为Articles的类。 Python不能同时将它们放在头脑中,所以一旦你做出class Articles(webapp.RequestHandler),它就会取代class Articles(db.Model)

webapp.RequestHandler没有all()方法,并且您没有在第二个Articles类中定义一个方法。这就是你遇到特定错误的原因。

您应该为您的班级使用不同的名称。

答案 1 :(得分:2)

我会以这种方式重构 *

  1. class Articles(webapp.RequestHandler)

  2. 中重命名class ArticlesHandler(webapp.RequestHandler)
  3. 将您的Articles模型移到名为models.py的单独文件中

  4. from models import Articles添加到 webhandlers 文件

  5. 使用Handler后缀可以帮助您区分规范类和Web处理程序; 一个不同的models.py模块将您的模型实现隔离在一个地方,并且在您的项目变得更加复杂时非常有用。

    *第1步足以解决您的具体问题