You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DuckDB中用NumPy数组更新WHERE子句匹配行的数组列?

用NumPy数组更新DuckDB指定行的数组列

需要在DuckDB中,针对WHERE子句匹配到的行,用Python生成的NumPy数组更新对应的数组列。比如将示例中的new_array赋值给example表中id=2的行。

完整解决代码

import duckdb
import numpy as np

# 建立DuckDB连接
con = duckdb.connect()

# 创建表并插入初始数据
con.sql("CREATE TABLE example (id INTEGER, vec FLOAT[3]);")
con.sql("INSERT INTO example VALUES (1, array_value(1.0::FLOAT, 2.0::FLOAT, 3.0::FLOAT));")
con.sql("INSERT INTO example VALUES (2, NULL);")

# 查看初始数据
print("初始数据:")
print(con.sql("SELECT * FROM example;").fetchall())

# 生成要更新的NumPy数组
new_array = np.array([4,5,6], dtype=np.float32)

# 执行更新:将NumPy数组转为DuckDB兼容格式后赋值
con.sql("UPDATE example SET vec = ? WHERE id = 2", [duckdb.array(new_array)])

# 验证更新结果
print("\n更新后数据:")
print(con.sql("SELECT * FROM example;").fetchall())

关键说明

  • 类型适配:使用duckdb.array()函数将NumPy数组转换为DuckDB原生支持的数组类型,确保和表中FLOAT[3]列的类型完全匹配。
  • 参数化查询:用?作为占位符传递变量,既避免SQL注入风险,也能让DuckDB正确解析Python对象。
  • 精准定位:通过WHERE id=2指定更新范围,仅修改目标行的数组列,不会影响其他数据。

内容的提问来源于stack exchange,提问作者snaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:52:39