gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:51:23 26 4
gpt4 key购买 nike

我想从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com