2010-11-01 67 views
0

當我嘗試創建屏幕對象時,出現了奇怪的錯誤。在它沒有任何問題的情況下工作之前,我在向User類添加新屬性時遇到了此錯誤。這個屬性通過user_screens與屏幕之間的關係是多對多的關係。這是錯誤:初始化對象的問題

「InvalidRequestError:一個或多個映射器編譯失敗。在hasattr()調用中可能會被異常抑制消息爲:一個或多個映射器無法編譯異常可能被抑制在hasattr 。)呼叫消息是:類「zeppelinlib.screen.ScreenTest.Screen」未映射」

這些類:

class Screen(rdb.Model): 
    """Set up screens table in the database""" 
    rdb.metadata(metadata) 
    rdb.tablename("screens") 

    id = Column("id", Integer, primary_key=True) 
    title = Column("title", String(100)) 
    ip = Column("ip", String(20)) 
     ... 

user_screens = Table(
      "user_screens", 
      metadata, 
      Column("user_id", Integer, ForeignKey("users.id")), 
      Column("screen_id", Integer, ForeignKey("screens.id")) 
     ) 

class User(rdb.Model): 
    """Set up users table in the database""" 
    rdb.metadata(metadata) 
    rdb.tablename("users") 

    id = Column("id", Integer, primary_key=True) 
    name = Column("name", String(50)) 
    ... 

    group = relationship("UserGroup", uselist=False) 
    channels = relationship("Channel", secondary=user_channels, order_by="Channel.titleView", backref="users") 
    mediaGroups = relationship("MediaGroup", secondary=user_media_groups, order_by="MediaGroup.title", backref="users") 
    screens = relationship("Screen", secondary=user_screens, backref="users") 

我可能不會添加新的關係到用戶,因爲我真的不知道知道問題是什麼...

謝謝!

+0

什麼是rdb.Model?它是由declarative_base()調用的結果嗎? – 2010-11-02 21:26:00

+0

rdb.Model是建立在SQLAlchemy上的庫。該庫與GROk,CMS所使用的相關。這個問題可能會由於那個圖書館而出現,我不確定,但它無論如何都很奇怪! – bribon 2010-11-02 22:15:10

+0

我相信你的問題與你正在使用的CMS庫有關。您給出的示例非常接近SQLAlchemy ORM多對多教程,該教程適用於我。我在我的機器上試過你的代碼,換出了SQLAlchemy的聲明的GROK,它工作正常。 http://www.sqlalchemy.org/docs/orm/tutorial.html#building-a-many-to-many-relationship – 2010-11-02 22:33:50

回答

0

嘗試通過關鍵字參數指定主連接(不知道哪一個)relationship。有時(在複雜的關係圖中)SQLAlchemy很難弄清楚它應該如何去做。不止一次爲我工作,儘管在0.5.x.