我一直在阅读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
这是什么意思?我怎么能让这不失败? :/
答案 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__