mariadb 使用列名作为键生成json对象

wbgh16ku  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(106)

是否可以使用列名作为键自动生成一个json对象?我有一个包含许多列的表,我需要将其转储到一个json对象中。我知道我可以使用JSON_OBJECT函数来完成此操作,但我一直在寻找一种更简洁的语法,使我不必指定所有列的名称就可以完成此操作

SELECT JSON_OBJECT("col_a", m.col_a, "col_b", m.col_b, "col_c", m.col_c, ...)
  FROM largetable AS m

像这样的东西?

SELECT JSON_OBJECT(m.*)
  FROM largetable AS m

我使用的是MariaDB版本10.8.2

qpgpyjmq

qpgpyjmq1#

Json对象在其他语言中也有意义 比如javascript,C#...在大多数语言中,有很多库可以将MariaDB查询的结果转换为json对象的列表。另外,一个好的做法是在应用程序中执行查询和处理结果时,使数据库引擎尽可能少地工作。

ffx8fchx

ffx8fchx2#

当然这是不可能的,因为解析器不会接受JSON_OBJECT函数的奇数个参数。
要在纯SQL中执行此操作,您不能在单个语句中执行此操作,因为您需要首先从information_schema中检索列名:

select @statement:=concat("SELECT JSON_OBJECT(", group_concat(concat("\"",column_name,"\"", ",", column_name)),") FROM mytable") from information_schema.columns where table_name="mytable" and table_schema="test";

prepare my_statement from statement;

execute my;

在应用程序中转换结果要容易得多,速度也快得多,例如在Python中:

import mariadb, json

conn= mariadb.connect(db="test")
cursor= conn.cursor(dictionary=True)
cursor.execute("select * from mytable")
json_row= json.dumps(cursor.fetchone())

相关问题