在Pylons中创建我的模型时遇到一些麻烦

时间:2010-07-31 05:56:04

标签: python model sqlalchemy pylons

我一直在阅读Pylons Book,并且在阅读有关模型的部分时,意识到它已经过时了。所以我接着转到官方Pylons文档,在Pylons 1.0中创建模型 - http://pylonshq.com/docs/en/1.0/tutorials/quickwiki_tutorial/

我已经关注他们已经得到的东西,而且它仍然失败。

./博客/模型/的初始化的.py

"""The application's model objects"""
from sqlalchemy import orm, Column, Unicode, UnicodeText
from blog.model.meta import Session, Base


def init_model(engine):
    """Call me before using any of the tables or classes in the model"""
    Session.configure(bind=engine)

class Page(Base):
   __tablename__ = 'pages'

   title   = Column(Unicode(40), primary_key=True)
   content = Column(UnicodeText(), default=u'')


class Page(object):

   def __init__(self, title, content=None):
      self.title   = title
      self.content = content

   def __unicode__(self):
      return self.title

   __str__ = __unicode__

orm.mapper(Page, pages_table)

有两个同名的课程让我大吃一惊......不过,这就是教程所要做的。

但是,当我尝试运行我的代码时,我得到了:

 28, in <module>
    orm.mapper(Page, pages_table)
NameError: name 'pages_table' is not defined
这是什么意思?我怎么能让这不失败? :/

1 个答案:

答案 0 :(得分:4)

首先,您不应声明两个具有相同名称的类。这应该是怎么回事?

其次,您可能希望阅读官方SQLA文档,而不是Pylons。 Pylons docs在升级后有点乱,并且仍然有很多0.9.7引用。 声明性扩展在此处描述:http://www.sqlalchemy.org/docs/reference/ext/declarative.html

第三,声明意味着你不需要将类绑定到表,它是在类定义中完成的。

这是足够的映射声明,您可以继续使用它:

class Page(Base):
   __tablename__ = 'pages'

   title   = Column(Unicode(40), primary_key=True)
   content = Column(UnicodeText(), default=u'')

   def __init__(self, title, content=None):
      self.title   = title
      self.content = content

   def __unicode__(self):
      return self.title

   __str__ = __unicode__