pandas to_sql with dict raises "can't adapt type 'dict'",有没有办法避免“转储”?

pandas to_sql with dict raises "can't adapt type 'dict'", is there a way to avoid `dumps`?

我正在尝试在 PostgreSQL table(pandas 1.4,Postgres 13)上加载一个简单的 pandas DataFrame:

df = pd.DataFrame([{"index": 1, "properties": {"a": 1, "b": 2}}])
df.to_sql("_test_table", con, if_exists="replace")

然而,我得到 ProgrammingError: can't adapt type 'dict'

我在 that applying json.dumps fixes the issue, and they are right. However, I would like to know if there's a way to leverage PostgreSQL JSON 中看到了类型而不是将信息转换为字符串。

psycopg2 文档提到了 "JSON Adaptation",但是 运行 psycopg2.extensions.register_adapter(dict, psycopg2.extras.Json) 在开始时再次将数据存储为 text

the psycopg2 FAQ 上有几次提到 JSON,但我认为它们没有回答我的问题。

这本质上是 Writing JSON column to Postgres using Pandas .to_sql 的副本:解决方案是将 .to_sqldtype 参数与 sqlalchemy.types.JSON 一起使用:

import sqlalchemy


df = pd.DataFrame([{"index": 1, "properties": {"a": 1, "b": 2}}])
df.to_sql("_test_table", dwh_con, if_exists="replace", dtype={"properties": sqlalchemy.types.JSON})

现在一切正常。