我是sqlalchemy的新手。所以任何帮助都表示赞赏。 我有一个函数来构造我的应用程序的查询。我传递了一个表格列表来加入。
以下是相关的代码段。
class Scope(Base):
entry = Column(String(512))
location_id = Column(Integer, ForeignKey('location_id'))
type = Column(String(128))
class Location(Base):
id = Column(Integer, primary_key=True)
name = Column(String(512)
modified_by = Column(String(128))
instances = [Scope, Location]
join_classes = [Location]
queryset = session.query(*instances).join(*join_classes).all()
这是运行的SQL查询(当我在.all()之前将queryset打印到屏幕时):
queryset:SELECT scope.id AS scope_id,scope.location_id AS scope_location_id,scope.entry AS scope_entry,scope.type AS scope_type,location.name AS location_name,location.modified_by AS location_modified_by,
FROM范围JOIN位置ON location.id = scope.location_id
我想要的最终结果是:所有列的字典列表(来自两个表 - 就像常规内部连接一样,只有一个表)。
但是,当我输入(queryset)时,我正在获取一个列表,当我只是尝试在查询集中执行 [u._asdict()for you 时,这是我返回列表的方法在没有连接的查询中的字典,它只返回每个表中1列的字典列表(__repr__中的列。
我需要返回两个表中的所有列。
现在这就是我得到的结果: [{'范围':192.168.0.0/24,'位置':主要},...]
我需要类似的东西,其中连接中的所有列都在字典列表中返回: [{' Scope.entry':192.168.0.0/24,' Scope.type':' virtual',' Location .name':main,' Location.modified_by':' jim'},...]
在我的代码中,实例& join_classes是动态传递的而不是硬编码的,因为不同的函数会传递表模型来连接(第一个模型表是所有进行连接的表)。我需要这个来处理多个表上的连接(但是所有表都将连接到第一个模型表,本例中为Scope。)
编辑:我终于意识到我正在获取sqlalchemy表对象的列表。这就是我在显示时获得__repr__值的原因。
答案 0 :(得分:0)
好吧,写完一些东西肯定会帮助你弄清楚答案。
对于任何可能受益的人都是我所做的。我确信有一种更有说服力的方法可以做到这一点,所以如果是的话请告诉我。
我终于正确阅读了我的输出并意识到它给了我2个表模型对象(每个表连接1个)。然后我遍历每个迭代,将每个迭代转换为字典列表,然后适当地合并这些字典,以便我有一个字典列表,如内部连接表将给我。
以下是我的一些代码:
for obj in queryset:
result.append(queryset_to_dict(obj))
for r in result:
new_dict = {}
for inner in r:
new_dict = {**new_dict, **inner}
new_result.append(new_dict)