gpt4 book ai didi

python - 如何在 python 中为 postgresql 创建具有多个值的插入查询

转载 作者:行者123 更新时间:2023-12-05 05:43:43 25 4
gpt4 key购买 nike

我在 df 中有类似的数据

<表类="s-表"><头><次>次 位置信息<正文>2.13印度好2.34美国好

我需要将其更新为时间刻度数据库,其中时间是唯一键,我已经使用过

    list_db_df=df.values.tolist()

现在这变成了一个值列表,例如

[[2.13,India,Good],[2.34,USA,Good]]

我该如何编写这样的插入查询,

INSERT INTO table_name
VALUES
(NOW(), 'office', 70.0, 50.0),
(NOW(), 'basement', 66.5, 60.0),
(NOW(), 'garage', 77.0, 65.2);

基本上是这种格式

https://docs.timescale.com/timescaledb/latest/how-to-guides/write-data/insert/#insert

需要关于冲突条款的帮助(Example)

INSERT INTO table_name
VALUES ('2017-07-28 11:42:42.846621+00', 'office', 70.2, 50.1)
ON CONFLICT (time, location) DO UPDATE
SET temperature = excluded.temperature,
humidity = excluded.humidity;

例如,excluded.temperature 是什么。

提前致谢。

最佳答案

引自docs

The SET and WHERE clauses in ON CONFLICT DO UPDATE have access to the existing row using the table's name (or an alias), and to rows proposed for insertion using the special excluded table.

在您的示例中,excluded.temperature具有值 70.2

详情

另见 DbFiddle example :

假设,表中已经有一行包含此主键('2017-07-28 11:42:42.846621+00'office):

<表类="s-表"><头><次>次 位置温度湿度<正文>2017-07-28 12:42:42.846621+01办公室60.150

现在我们执行插入语句(具有相同的主键)和不同的ON CONFLICT子句

没有ON CONFLICT子句

INSERT INTO conditions VALUES ('2017-07-28 11:42:42.846621+00', 'office', 70.2, 50.1)

当我们不使用ON CONFLICT时,我们得到一个错误:

ERROR:  duplicate key value violates unique constraint "conditions_time_location_key"
DETAIL: Key ("time", location)=(2017-07-28 12:42:42.846621+01, office) already exists.

发生冲突时什么都不做

INSERT INTO conditions 
VALUES ('2017-07-28 11:42:42.846621+00', 'office', 70.2, 50.1)
ON CONFLICT DO NOTHING

在这种情况下,新数据被忽略并且该行与以前相同:

<表类="s-表"><头><次>次 位置温度湿度<正文>2017-07-28 12:42:42.846621+01办公室60.150

关于冲突做更新

例子:

INSERT INTO conditions 
VALUES ('2017-07-28 11:42:42.846621+00', 'office', 70.2, 50.1)
ON CONFLICT (time, location) DO UPDATE
SET humidity = excluded.temperature;

将导致:

<表类="s-表"><头><次>次 位置温度湿度<正文>2017-07-28 12:42:42.846621+01办公室60.170.2

注意:我们分配 humidityexcluded.temperature - 这在生产应用程序中没有真正意义,仅用于说明其工作原理

当我们使用 ON CONFLICT DO UPDATE , 我们可以访问一个名为 exclude 的特殊表.该表包含我们的插入语句中已排除(即忽略)的值,因为其他值已经存在。

在我们的例子中:

  • excluded.temperature70.2
  • excluded.humidity50.1

当你没用的时候SET对于列,该列保留旧值:即 temperature仍将是 60.1在我们的插入语句之后。

当你使用 SET 时对于列,您可以分配任何您喜欢的值:例如常数值、表达式或来自特殊 excluded 的值包含排除行的表。

关于python - 如何在 python 中为 postgresql 创建具有多个值的插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71764963/

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