【问题标题】:How do you write MySQL query using JSON_OBJECTAGG on SQLAlchemy's SQL Expression Language?如何在 SQLAlchemy SQL 表达式语言中使用 JSON_OBJECT 编写 MySQL 查询?
【发布时间】:2019-08-04 19:52:39
【问题描述】:
我在 MySQL 8.0 上使用 SQLAlchemy。
我正在尝试编写一个在 SQL 表达式语言上使用 JSON_OBJECTAGG 函数的查询。
由于它是 MySQL 中的预定义函数,我想知道是否有规范的方法可以实现此目的。
问题
【问题讨论】:
标签:
python
mysql
sqlalchemy
mysql-8.0
【解决方案1】:
对于可以使用func 调用的 SQL 函数没有任何限制1。以MySQL documentation为例:
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 不能用于使用命名符号轻松生成函数调用。