如何在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
相关产品推荐
相关产品推荐

