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

我遵循了他们的能力,但仍然失败。

./blog/model/init.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


吃这个吗我如何才能做到这一点呢? :/

最佳答案

首先,您不应声明两个具有相同名称的类。那应该怎么工作?

其次,您可能想阅读SQLA官方文档,而不是Pylons。升级后,Pylons文档有些混乱,并且仍然有很多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__

关于python - 在Pylons中创建模型时遇到麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3377013/

10-12 21:13