mysql - 你能在 MySql 中将行转换为 json 吗?

标签 mysql json serialization

我想从 DynamoDB 切换到 AWS Aurora MySql,但遇到了障碍。我的一些 Dynamo 表上有一个触发器,可以触发 lambda 函数。我在 Aurora 中需要相同的功能,它由 mysql.lambda_async 函数提供。第一个参数是 lambda ARN,第二个参数是将发送到 lambda 函数的 Json。

我希望能够序列化新的或更新的行,而不必知道所有列。每次我们更改/添加/删除列时都必须更新触发器,这会很不方便。

有没有办法在不知道从中选择的表的架构的情况下序列化 MySql 中的行?

如果不是,我想我的下一个问题是是否有一种方法可以迭代连续的字段,以便我可以自己创建函数。如果是这样,我将创建一个新的问题。

最佳答案

好吧,我想出了一个办法,但对我来说没用。我想你不能在触发器或函数内执行准备好的语句,所以这并不重要。

如果有人想尝试的话,这是我的代码。您传入表和关键信息,它循环遍历列,使用准备好的语句检索每列的值,并为每个列/值对生成 JSON。可能有更性感的方法可以做到这一点,但它很实用。

DELIMITER $$

CREATE PROCEDURE GenerateJson (primaryKey varchar(50), id varchar(250), tableName varchar(200), INOUT json_result varchar(4000))
BEGIN

 DECLARE v_finished INTEGER DEFAULT 0;
        DECLARE v_json varchar(100) DEFAULT "";

 -- declare cursor for all table columns
 DEClARE json_cursor CURSOR FOR 
 Select COLUMN_NAME from INFORMATION_SCHEMA.Columns Where TABLE_NAME = tableName;

 -- declare NOT FOUND handler
 DECLARE CONTINUE HANDLER 
        FOR NOT FOUND SET v_finished = 1;

 OPEN json_cursor;

Set json_result = Concat('{ Table:', '''',tableName,'''', ',', 'KeyName: ', '''', primaryKey, '''', ', KeyValue: ', '''', id, '''', ', ', ' Item: {') ;

 get_json: LOOP

 FETCH json_cursor INTO v_json;

 IF v_finished = 1 THEN 
 LEAVE get_json;
 END IF; 


SET @sql:=CONCAT('SELECT ',v_json, ' from ',tableName, ' WHERE ',primaryKey, ' = ', CONCAT('''',id,''''), ' Into @propVar;');


PREPARE dynamic_statement FROM @sql;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;

SET @newJson = CONCAT(v_json, ': ', '"', @propVar, '"');

 SET json_result = CONCAT(' ',json_result, @newJson, ',');

 END LOOP get_json;

 CLOSE json_cursor;

--trim last comma
SET json_result = CONCAT(LEFT(json_result, CHAR_LENGTH(json_result) -1), '');
SET json_result = CONCAT(json_result, ' }}');
END$$

DELIMITER ;

关于mysql - 你能在 MySql 中将行转换为 json 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49302949/

相关文章:

javascript - 如何使用 javascript 将值传递给 php 或 txt 文件

php - MYSQL 等于一个 id 与两个不同的 id

php - 从数据库检索数据并将其作为实体实例传递

jquery - isoHunt JSON 搜索 API 无法正常工作

django - 动态更改序列化程序字段

在 C 中将二叉树转换为数组(并稍后保存)

MySQL过滤一个范围内的分隔项目列表的col

C++ nonlohmann json读取子对象

c# - 使用 override void WriteEndElement() 时如何使用 XmlWriterSettings()?

ios - 用 JSON 数据填充 UITableView 是行不通的