Возникли проблемы при создании моей модели в пилонах - PullRequest
1 голос
/ 31 июля 2010

Я читал «Книгу пилонов» и, узнав о моделях, понял, что она устарела.Поэтому я переключился на официальную документацию 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)

Наличие двух классов с одинаковыми именами поражает воображение ... Но, тем не менее, это то, что говорится в учебникеdo.

Однако, когда я пытаюсь запустить свой код, я получаю:

 28, in <module>
    orm.mapper(Page, pages_table)
NameError: name 'pages_table' is not defined

Sup с этим?Как я могу получить это, чтобы не подвести?: /

1 Ответ

4 голосов
/ 31 июля 2010

Во-первых, вы не должны объявлять два класса с одинаковыми именами. Как это вообще должно работать?

Во-вторых, вы, вероятно, захотите прочитать официальные документы по SQLA, а не 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__
...