gpt4 book ai didi

python - Aurora MySQL 列值的批量垂直更新

转载 作者:行者123 更新时间:2023-11-29 10:19:35 27 4
gpt4 key购买 nike

所以我正在使用 Aurora MYSQL DB,并且我的 AWS Lambda 实例需要执行以下操作。假设一个表有两列:ID 和翻译后的 ID。我可以访问 Lambda 函数,该函数将 ID 作为输入,并输出翻译后的 ID。它还可以获取 ID 列表,并返回翻译后的 ID 列表。现在的问题是,我正在逐行执行此操作,工作流程如下:1. 从表中获取前 100 行,其中翻译的 ID 为空,2. 对于每一行,检索 ID,使用 API 获取翻译后的 ID。3. 使用翻译后的 ID 更新该行。4. 冲洗并重复所有 100 行。

问题是由于中间涉及 api 的延迟,逐行操作导致 lambda 函数超时。有什么办法可以进行批量操作,同时仍然将翻译后的 IDS 与相应的 ID 垂直对齐?像这样的东西:

  1. 从表中获取前 100 个 IDS,其中翻译后的 ID 为空。
  2. 使用 API 获取所有 100 个 IDS 的列表,并获得相应的 100 个已翻译 ID 的列表。
  3. Pefro(最好在一个更新命令中)更新所有 100 个 ID 行及其相应的 Translated-id 列。

最佳答案

4 个查询:

(0)。确保环境干净(如果您从不重用数据库连接,则可以忽略这一点)。

DROP TEMPORARY TABLE IF EXISTS my_updates;

(1)。创建一个临时表来保存新值。

CREATE TEMPORARY TABLE my_updates (
id INT NOT NULL,
translated_id INT NOT NULL,
PRIMARY KEY(id)
);

(2)。在批量插入中插入所有新值。

INSERT INTO my_updates (id, translated_id)
VALUES (?,?), (?,?), (?,?), ...

重复 (?,?) × 100。将包含 200 个元素的数组传递给此查询。一些 MySQL 库具有多行插入的快捷方式,其他库则需要构建行参数占位符集。

(3)。您现在在服务器上拥有所有 100 个新元组,因此您可以要求它更新...加入。

UPDATE base_table b
JOIN my_updates m ON m.id = b.id
SET b.translated_id = m.translated_id;
<小时/>

您也可以在一个查询中执行此操作,尽管它有点复杂:

UPDATE base_table
SET translated_id = CASE id
WHEN @i1 THEN @ti1
WHEN @i2 THEN @ti2
...
WHEN @i100 THEN @ti100
ELSE translated_id END
WHERE id IN (@i1,@i2,...@i100);

我在这里使用@value作为占位符来解释什么去哪里,因为它比上面的示例不太直观,但这个查询实际上也应该使用 ? 占位符来完成。传递的参数将是一个包含 300 个成员的数组,其中包含 100 组 (id,translated_id),然后再次将所有 (id) 值用于 WHEREELSE 是一种安全预防措施...实际上永远不应该到达它,但如果到达,则不会覆盖任何数据。

关于python - Aurora MySQL 列值的批量垂直更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49570363/

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