对不起,我对这一切都有点新鲜。
我正在使用psycopg2,python和postgres。
我有两个表 - 用户和事件。我建立了多对多关系,因为一个事件可以有很多用户,用户可以加入很多事件。有一个名为UsersEvents的中间表,将User id与Event id匹配。我想获得类似于此的dict中的事件和用户列表:
php artisan server:run
我正在使用psycopg2运行这样的查询,以获取与之关联的事件和用户列表:
[
{
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'}
]
}
]
让我回到这样的东西:
SELECT events.id, event_name, users.username
FROM events
JOIN usersevents on events_id = events.id
JOIN users on usersevents.users_id = users.id;
所以它很好地回收了我需要的信息,但现在我必须尝试弄清楚如何将它合并到上面的格式中。是否有更好的查询我正在尝试做什么,或者我应该循环遍历所有结果并尝试使用相同的事件名称合并结果?
编辑:我理解如何将结果作为dict返回,如评论中所指出的那样。我想获取具有重复事件名称的行,并将加入该事件的用户嵌套到单个事件对象的单个dict行中。
答案 0 :(得分:0)
您希望按名称为每个事件构建数据结构。创建一个将名称映射到事件数据的dict。对于每一行,创建或更新事件的数据。最后,dict中的值是事件数据列表。
for id, event, user in results:
event = events.setdefault(id, {'event_id': id, 'event_name': name, 'joined': []})
event['joined'].append({'username': user})
data = list(events.values())