mariadb 使用sqlalchemy在mysql列中合并JSON

ftf50wuq  于 2023-03-30  发布在  Mysql
关注(0)|答案(1)|浏览(140)

我想通过python sqlalchemy库合并mysql列中分布在多行的json数据。我计划使用json_merge_preserve,但无法使用整个列。
我使用了以下代码:
select(func.json_merge_preserve(db.mytable.c.myjsoncolumn))
但是它说这个函数至少需要两个参数。

kfgdxczn

kfgdxczn1#

例如,创建SQL函数:

DELIMITER //
CREATE AGGREGATE FUNCTION json_merge_preserve_agg(j TINYTEXT) RETURNS TEXT DETERMINISTIC
BEGIN
  DECLARE r TEXT;
  DECLARE CONTINUE HANDLER FOR NOT FOUND return r;
  LOOP
    FETCH GROUP NEXT ROW;
    IF r IS NULL THEN
      SET r = j;
    ELSE
      SET r = JSON_MERGE_PRESERVE(r, j);
    END IF;
  END LOOP;
END //

一些示例数据:

create table j (t text);

insert into j values ('[1, 2]'),('[2, 4]');

使用函数返回结果:

select json_merge_preserve_agg(t) from j;

使用sql alchemeny中的函数类似于this answer

from sqlalchemy.sql.expression import func

 result = conn.execute(select(func.json_merge_preserve_agg(db.mytable.c.myjsoncolum)))

参考:fiddle
参考:aggregate functions of MariaDB
注意:仅限MariaDB-10.3+,MySQL没有聚合(非UDF)函数。

相关问题