2014-03-24 35 views
1

當我使用SQLA繼承(我有與__mapper_args__設置那裏mixin)我堅持一個問題,SQLAlchemy引發查詢異常。當with_polymorphic用於模型與order_by映射器arg呈現字符串

重現它:

  • 型號應該有__mapper_arg__屬性與order_by參數組到任何字符串。
  • add with_polymorphic('*')調用此模型進行查詢。
class User(Base): 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 

    __mapper_args__ = {'order_by': 'User.name'} 

採用這種結構的一切工作得很好,除了當我們添加with_polymorphic('*')查詢。

db.query(User).with_polymorphic('*') 

這種失敗例外

File "/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 267, in clone 
    'no_replacement_traverse' in elem._annotations: 
AttributeError: 'str' object has no attribute '_annotations' 

我想這是一種錯誤的。但由於它在SQLA 0.7-0.9上重現,我對我遇到此問題的方式感到懷疑。也許我做錯了什麼?

此問題轉載於small testcase


附:

本來我需要這個混入在我的項目:

class DocMixin(object): 

    id = Column(Integer) 
    title = Column(String(255)) 

    @declared_attr 
    def __mapper_args__(cls): 
     return {'order_by': 'title'} 

回答

0

不要在order_by映射參數使用字符串,直接使用列。將'User.name'更改爲name可使您的示例通過測試。

+0

不幸的是,當我在MixIn中有字段時,它不適用於y的情況。 當我使用 – Lehych

+0

@Lehych在這裏使用'cls.title'而不是''title''有什麼問題? –

+0

然後我得到了一個異常:'CompileError:不能編譯Column對象,直到'name'被賦值爲止。 我想我最終找到了相關問題https://groups.google.com/forum/#!topic/sqlalchemy/Y5Tc-e3vZGI,其中邁克爾·拜爾說解決方案僅適用於SQLA> 0.8。 – Lehych