python - 如何使用 pandas 和 sqlalchemy 将 VARIANT 或 ARRAY 数据类型插入到 Snowflake 中

标签 python pandas sqlalchemy snowflake-cloud-data-platform

我有一个 Pandas 数据框,其中包含多个列表列。我想将它们作为 ARRAY 数据类型插入到我的 Snowflake 表中。

传统上,我使用 PostgreSQL,并简单地插入为 df_to_insert.to_sql(TABLE_NAME, sqlalchemy_connection, **other_parameters)

但是,我正在努力插入雪花。当我有一个列表列时,sqlAlchemy Snowflake 方言认为它是一个字符串:

Expression type does not match column data type, expecting ARRAY but got VARCHAR(2) for column NAME_OF_COLUMN_WITH_LISTS

我尝试通过添加显式数据类型来向 sqlAlchemy 引擎提示该列不是字符串:

df_to_insert.to_sql("MY_SNOWFLAKE_TABLE_NAME",
                     snowflake_connection,
                     if_exists="append",
                     index=False,
                     dtype={'NAME_OF_COLUMN_WITH_LISTS': sqlalchemy.types.JSON})

这只会让我:

sqlalchemy.exc.StatementError: (builtins.AttributeError) 'SnowflakeDialect' object has no attribute '_json_serializer'

将数据插入变体/数组类型的 Snowflake 表并仍然使用 pandas/sqlalchemy 的最佳方法是什么?或者目前还没有什么好的办法吗?

最佳答案

解决这个问题的直接方法是:

  1. 将数据帧写入本地文本文件。
  2. 使用 PUT 命令上传到 Snowflake STAGE
  3. 运行创建或替换表作为从阶段中选择,并将字段在 select 语句中转换为正确的类型。

关于python - 如何使用 pandas 和 sqlalchemy 将 VARIANT 或 ARRAY 数据类型插入到 Snowflake 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55681077/

相关文章:

python - 需要将整个列从字符串格式转换为 Dataframe 的日期格式

python - Pandas Dataframe For 循环

具有属性约束(例如必需/可选)的 Python ORM?

python - 使用 sqlalchemy 和 pyodbc 连接到 SQL Server 2012

asp.net - 如何使用python+mechanize在asp.net网站上按下按钮

python - 升级 numpy 数组并均匀分布值

python - 不使用 for 循环的子数组的点积

python - 迭代多个 DataFrame 的更有效方法

python - Pandas 的指数拟合

python - 监听简单表上的插入/更新事件