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

如何将Python字典插入含MAP(INT, MAP(TEXT, TEXT))列的DuckDB表?

解决DuckDB嵌套MAP列插入问题

直接传入Python嵌套字典无法被DuckDB正确解析为MAP(INT, MAP(TEXT, TEXT))类型,以下是几种可行的实现方式:

方法1:使用duckdb.Map构造嵌套MAP对象

显式将Python字典转换为DuckDB的Map类型,内层字典也需要同步转换:

import duckdb
from duckdb import Map

my_dict = {0: {'test_key': 'test_val'}}
# 转换嵌套结构为DuckDB兼容的Map类型
converted_map = Map({k: Map(v) for k, v in my_dict.items()})

with duckdb.connect(configs.db_path) as con:
    query = "INSERT INTO table_name (str_col, map_col) VALUES (?, ?)"
    con.execute(query, ['test_str', converted_map])

方法2:通过Pandas DataFrame插入

DuckDB可以自动识别Pandas DataFrame中的嵌套字典,并映射为对应的MAP类型:

import pandas as pd
import duckdb

my_dict = {0: {'test_key': 'test_val'}}
# 构造与表结构匹配的DataFrame
df = pd.DataFrame({'str_col': ['test_str'], 'map_col': [my_dict]})

with duckdb.connect(configs.db_path) as con:
    con.execute("INSERT INTO table_name SELECT * FROM df")

方法3:构造SQL MAP字面量

将Python字典转换为DuckDB支持的MAP字面量语法,直接写入SQL语句:

import duckdb

my_dict = {0: {'test_key': 'test_val'}}
# 生成DuckDB兼容的MAP字符串
map_segments = []
for outer_key, inner_dict in my_dict.items():
    inner_segments = ", ".join([f"'{k}', '{v}'" for k, v in inner_dict.items()])
    map_segments.append(f"{outer_key}, MAP({inner_segments})")
final_map_literal = f"MAP({', '.join(map_segments)})"

with duckdb.connect(configs.db_path) as con:
    query = f"INSERT INTO table_name (str_col, map_col) VALUES ('test_str', {final_map_literal})"
    con.execute(query)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:17:39