2010-07-31 2 views
1

Я читал книгу 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 

Sup с этим? Как я могу заставить это не подвести? :/

ответ

4

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

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

Согласован: вы были правильно подозрительными советы по созданию классов с тем же именем. –

+0

Вскоре после публикации моего вопроса мои поисковые запросы Google появились http://bitbucket.org/bbangert/quickwiki/src, который является кодом учебника, написанным для Pylons 1.0. Теперь мой код работает. – dave

Смежные вопросы