使用with_polymorphic对模型进行查询时,SQLAlchemy在字符串形式的order_by映射参数下抛出异常
我在使用SQLA继承时遇到了一个问题(我在这里有一个带有__mapper_args__
的混合类)。
要重现这个问题:
- 模型应该有一个
__mapper_arg__
属性,并且order_by
参数设置为任意字符串。 - 在查询这个模型时,添加
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'
我觉得这可能是个bug。不过因为在SQLA 0.7-0.9版本中都能重现这个问题,我对自己遇到这个问题的方式有些怀疑。也许我做错了什么?
这个问题在一个小测试案例中被重现。
附言:
最初我在我的项目中需要这个混合类:
class DocMixin(object):
id = Column(Integer)
title = Column(String(255))
@declared_attr
def __mapper_args__(cls):
return {'order_by': 'title'}
1 个回答
0
在order_by
这个参数里,不要用字符串,直接用列名就可以了。把'User.name'
改成name
,你的例子就能通过测试了。