Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从select SqlAlchemy by column value创建字典组_Python_Mysql_Sql_Json_Sqlalchemy - Fatal编程技术网

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()
这对我很有用!谢谢。