我正在使用金字塔和sqlalchemy为一些简单的论坛创建一个api。我有一个视图,当用户向下滚动到页面末尾时,我想简单地将一些json格式的帖子返回给客户端。由于某种原因,查询甚至没有运行,我返回的是查询对象而不是rowproxy对象。这只是一个测试查询顺便说一句,我只是从数据库中获取了几次并尝试在json中发送它们。
@view_config(route_name='get-posts', renderer='json')
def get-posts(request)
q = session.query(Topic).filter(Topic.name =='gaming')\
.order_by(desc(Topic.topic_date)).limit(10)
results = [dict(zip(row.keys()) for row in q)]
return {'posts' : results}
当这个运行时,我会得到"属性错误:'主题' object没有attribtue键",在检查q的类型时,我发现它的类型为:sqlalchemy.orm.query.Query
有谁知道为什么查询没有运行?我有一个非api视图函数,其中我做了几乎相同的事情,并返回结果(行代理作为字典的内容,它的工作原理......
答案 0 :(得分:2)
这是设计的。查询上有一些方法会导致执行底层查询。 all(),one(),first()等等。
如果您需要查询对象作为列表,请在其上调用all():
@view_config(route_name='get-posts', renderer='json')
def get-posts(request)
q = session.query(Topic).filter(Topic.name =='gaming')\
.order_by(desc(Topic.topic_date)).limit(10)
return {'posts' : q.all()}
查询对象的参考:http://docs.sqlalchemy.org/en/latest/orm/query.html#the-query-object