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

使用psycopg2.sql插入字典至PostgreSQL表时遇'type dict无法适配'错误

解决PostgreSQL插入jsonb字段时的"can't adapt type 'dict'"错误

问题根源是psycopg2无法自动将Python的字典/列表适配为PostgreSQL的jsonb类型,需要手动做转换处理,以下是两种可行方案:

方案一:单独处理目标字段(适合仅需转换特定字段的场景)

先导入psycopg2.extras中的Json工具,在插入前把months字段用它包装:

from psycopg2.extras import Json
import psycopg2
from psycopg2 import sql

# 假设已建立数据库连接conn
cursor = conn.cursor()

for d in data:
    columns_list = list(d.keys())
    insert_query = sql.SQL("INSERT INTO {schema}.{table_name} ({columns}) VALUES ({values})").format(
        schema=sql.Identifier(schema),
        table_name=sql.Identifier(table_name),
        columns=sql.SQL(",").join(map(sql.Identifier, columns_list)),
        values=sql.SQL(",").join(map(sql.Placeholder, columns_list))
    )
    # 复制原数据避免修改源数据
    insert_data = d.copy()
    # 对months字段做jsonb适配
    if 'months' in insert_data:
        insert_data['months'] = Json(insert_data['months'])
    cursor.execute(insert_query, insert_data)

# 提交事务
conn.commit()
cursor.close()
conn.close()

方案二:全局注册jsonb适配器(适合所有jsonb字段自动转换的场景)

如果表中有多个jsonb字段,或者不想逐个处理,在建立数据库连接后注册全局适配器,之后所有Python字典/列表都会自动适配成jsonb类型:

import psycopg2
from psycopg2 import sql
from psycopg2.extras import register_default_jsonb

# 建立数据库连接
conn = psycopg2.connect(
    dbname="your_db",
    user="your_user",
    password="your_pw",
    host="your_host"
)
# 注册全局jsonb适配器
register_default_jsonb(conn)

cursor = conn.cursor()

for d in data:
    columns_list = list(d.keys())
    insert_query = sql.SQL("INSERT INTO {schema}.{table_name} ({columns}) VALUES ({values})").format(
        schema=sql.Identifier(schema),
        table_name=sql.Identifier(table_name),
        columns=sql.SQL(",").join(map(sql.Identifier, columns_list)),
        values=sql.SQL(",").join(map(sql.Placeholder, columns_list))
    )
    # 直接传入原字典即可,无需手动处理
    cursor.execute(insert_query, d)

conn.commit()
cursor.close()
conn.close()

两种方案任选其一即可解决问题,根据你的实际场景选择就行。

内容的提问来源于stack exchange,提问作者Тимур Хабибуллин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:57:11