Python 为什么我的查询对象没有被执行,而仍然是一个查询对象?

Python 为什么我的查询对象没有被执行,而仍然是一个查询对象?,python,sqlalchemy,pyramid,Python,Sqlalchemy,Pyramid,我正在使用pyramid和sqlalchemy为一些简单的论坛创建一个api。我有一个视图,当用户向下滚动到页面末尾时,我只想将一些json格式的帖子返回给客户端。由于某些原因,查询甚至没有运行,并且返回的是查询对象而不是rowproxy对象。这只是一个测试查询,顺便说一句,我只是从数据库得到了几次,并试图用json发送它们 @view_config(route_name='get-posts', renderer='json') def get-posts(request) q = s

我正在使用pyramid和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} 
当运行该命令时,我得到“AttributeError:'Topic'对象没有属性键”,在检查q的类型时,我发现它的类型是:sqlalchemy.orm.query.query


有人知道为什么查询没有运行吗?我有一个非api视图函数,在这里我做的几乎是相同的事情,并返回结果(一个作为字典内容的行代理,它工作…

这是设计的。查询中有一些方法会导致执行底层查询。all()、one()、first()等等

如果需要查询对象作为列表,请对其调用all():


查询对象的引用:

这是经过设计的。查询中有一些方法会导致执行基础查询。all()、one()、first()等

如果需要查询对象作为列表,请对其调用all():


查询对象的引用:

[dict(用于q中的行的zip(row.keys())]将返回一个长度为1的列表,其中唯一的元素是字典。您想这样做吗?它总是一个查询对象。只是对查询进行迭代会产生结果。@Jeffmandel是的,我正在尝试获取查询结果的字典版本,这样我就可以在json中返回它[dict(zip(row.keys())for row in q]将返回一个长度为1的列表,其中唯一的元素是字典。是否要这样做?它始终是一个查询对象。只是迭代查询会产生结果。@Jeffmandel是的,我正在尝试获取查询结果的字典版本,以便以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)
    return {'posts' : q.all()}