【发布时间】:2016-07-30 01:39:21
【问题描述】:
对不起,我对这一切有点陌生。
我正在使用 psycopg2、python 和 postgres。
我有两个表 - 用户和事件。我已经建立了多对多的关系,因为一个活动可以有很多用户并且用户可以加入很多活动。有一个名为 UsersEvents 的中间表将用户 ID 与事件 ID 匹配。我想在与此类似的字典中获取事件和用户列表:
[
{
event_id: 1,
event_name : 'event-name',
joined : [
{'username' : 'name'},
{'username' : 'name'},
{'username' : 'name'}
]
},
{
event_id: 2,
event_name : 'event2-name',
joined : [
{'username' : 'name2'},
{'username' : 'name2'}
]
}
]
我正在使用 psycopg2 运行这样的查询,以获取事件列表和与之关联的用户:
SELECT events.id, event_name, users.username
FROM events
JOIN usersevents on events_id = events.id
JOIN users on usersevents.users_id = users.id;
返回给我的是这样的:
[
(1, 'event-name', 'name'),
(1, 'event-name', 'name'),
(1, 'event-name', 'name'),
(2, 'event2-name', 'name2'),
(2, 'event2-name', 'name2')
]
所以很高兴它能提取我需要的信息,但现在我必须尝试弄清楚如何将它合并到上面的格式中。对于我正在尝试做的事情,是否有更好的查询,或者我应该遍历所有结果并尝试合并具有相同事件名称的结果?
编辑:我了解如何将结果作为字典返回,如 cmets 中指出的那样。我想获取具有重复事件名称的行,并将加入该事件的用户嵌套到单个事件对象的单个 dict 行中。
【问题讨论】:
-
你说的你想要的格式,其实不是字典,而是字典列表。