在SqlAlchemy中加入时如何将子查询对象转换为ResultProxy类?

时间:2018-05-01 15:55:05

标签: python sqlalchemy

我有一个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。

我们可以明确地将强制类型转换为其他形式吗?

1 个答案:

答案 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