我有一个ORM类和一个子查询。我在两者之间创建了一个连接,我想访问子查询字段,因为类可能是一个伪ResultProxy对象。
代码示例:
session.query(ORM_Class,subqyery).\
join(subqyery,ORM_Class.id==subqyery.id).all()
这会导致我得到一个tupled结果集,其中ORM_CLass的第一个对象是有意义的,但是其余的id字段只是子查询的纯值。
[(orm.my_orm.ORM_Class Object , 1)]
1是来自子查询部分的Id。我想以ResultProxy.id或任何其他类似的形式访问id。
我们可以明确地将强制类型转换为其他形式吗?
答案 0 :(得分:0)
正如@ilja-everilä在评论中所提到的,查询的每个记录都是一个KeyedTuple
,就像Python中的namedtuple
一样,这意味着它中的每个字段都在其中元组也是属性名称。
您可以使用.keys()
方法获得包含这些记录之一的属性名称的字符串列表,或者如果您实际上有一个名为keys
的列会遮盖{{1} }方法,也可以使用._fields
属性。例如:
.keys()
或
>>> myquery.all()[0].keys()
['ORM_Class', 'something_id']
上面的内容告诉我,我可以使用>>> myquery.all()[0]._fields
['ORM_Class', 'something_id']
属性访问第二个字段:
something_id
您还可以使用._asdict()
方法获得将记录的所有实体名称映射为其值的字典:
>>> myquery.all()[0].something_id
235