如何在 SQLAlchemy 的 SQL 表达式语言中使用 JSON_OBJECTAGG 编写 MySQL 查询?

How do you write MySQL query using JSON_OBJECTAGG on SQLAlchemy's SQL Expression Language?

我在 MySQL 8.0 上使用 SQLAlchemy。 我正在尝试编写一个在 SQL 表达式语言上使用 JSON_OBJECTAGG 函数的查询。 由于它是 MySQL 中的预定义函数,我想知道是否有实现此目的的规范方法。

问题

没有限制1 可以使用 func. Given the example from MySQL documentation:

调用哪些 SQL 函数
mysql> SELECT o_id, attribute, value FROM t3;
+------+-----------+--------+
| o_id | attribute | value  |
+------+-----------+--------+
|    2 | color     | red    |
|    2 | fabric    | silk   |
|    3 | color     | green  |
|    3 | shape     | square |
+------+-----------+--------+
4 rows in set (0.00 sec)

查询:

SELECT o_id, JSON_OBJECTAGG(attribute, value)
   FROM t3 GROUP BY o_id;

在SQLAlchemy SQL Expression Language中会表示为:

select([t3.c.o_id, func.json_objectagg(t3.c.attribute, t3.c.value)]).\
    group_by(t3.c.o_id)

1 实际上有一些限制。例如,func 无法使用命名符号轻松生成函数调用。