Python 从select SqlAlchemy by column value创建字典组
我需要从表中选择所有行,并按列Python 从select SqlAlchemy by column value创建字典组,python,mysql,sql,json,sqlalchemy,Python,Mysql,Sql,Json,Sqlalchemy,我需要从表中选择所有行,并按列my_group分组组织 例如: 我的模范班是 类MyTable: id=列(整数,主键=True) 标签=列(Unicode(255)) my_group=列(Unicode(50),nullable=False) 我的桌子是空的 id | label | my_group | 1 | lbl1 | groupA | 2 | lbl2 | groupB | 3 | lbl3 | groupA | 4 | lbl4 | groupC
my_group
分组组织
例如:
我的模范班是
类MyTable:
id=列(整数,主键=True)
标签=列(Unicode(255))
my_group=列(Unicode(50),nullable=False)
我的桌子是空的
id | label | my_group |
1 | lbl1 | groupA |
2 | lbl2 | groupB |
3 | lbl3 | groupA |
4 | lbl4 | groupC |
5 | lbl5 | groupC |
我想要这样的结果
[
{
"groupA": [
{
"label": "lbl1",
"id": 1
},
{
"label": "lbl3",
"id": 3
}
]
},
{
"groupB": [
{
"label": "lbl2",
"id": 2
}
]
},
{
"groupC": [
{
"label": "lbl4",
"id": 4
},
{
"label": "lbl5",
"id": 5
}
]
}
]
只有使用SqlAlchemy才能做到这一点吗
谢谢 如果您使用的是MySQL的最新版本5.7.22及更高版本,则可以使用来生成所需的结果:
from sqlalchemy.dialects.mysql import JSON
query = session.query(
func.json_object(
MyTable.my_group, func.json_arrayagg(
func.json_object(
'label', MyTable.label,
'id', MyTable.id)),
type_=JSON)).\
group_by(MyTable.my_group)
result = [r for r, in query]
如果您确实需要一个组字典,则可以包装分组查询:
sq = session.query(
MyTable.my_group,
func.json_arrayagg(
func.json_object(
'label', MyTable.label,
'id', MyTable.id)).label('arr')).\
group_by(MyTable.my_group).\
subquery()
result = session.query(
func.json_objectagg(
sq.c.my_group, sq.c.arr,
type_=JSON)).\
scalar()
你用的是什么数据库管理系统?是MySQL,@IljaEverilä谢谢,我的MySQL版本很旧:(目前我使用这种格式,这是我的工作形式。
groups=session.query(MyTable.my_group)\.distinct(MyTable.my_group)。all()my_dict={}for(g,)in group:my_dict[g]=session.query(MyTable.id,MyTable.label)\.filter(MyTable.my\u group==g)\.all()
这对我很有用!谢谢。