将 Pandas Dataframe 的输出插入 Redshift 表

Posted

技术标签:

【中文标题】将 Pandas Dataframe 的输出插入 Redshift 表【英文标题】:Inserting output from Pandas Dataframe to a Redshift table 【发布时间】:2020-04-07 06:30:39 【问题描述】:

我正在尝试使用 insert 选项将从 Pandas Dataframe 获得的输出插入到 Redshift 表中。以下是我的数据:

dwh_cur.execute("""select max(created_at) from table_name""")
df = dwh_cur.fetchall()
df = pd.DataFrame(df, columns = ['max_date']) <<-- Pandas output 

我正在尝试使用以下查询将上述输出插入到 Redshift 表中:

dwh_cur.execute("""insert into new_table values('table_name', max_date)""")

我收到一个错误

psycopg2.ProgrammingError: column "max_date" does not exist in new_table

new_table 结构如下所示:

table_name, max_date

【问题讨论】:

错误信息显示 max_date 不在表中。你能检查数据库,确认表格,检查拼写吗?错误几乎说明了一切。所以我认为这应该是重点。我假设该表已经存在于数据库中 @sammywemmy 是的,表和列确实存在。只是当我执行插入查询时,它似乎没有从 DataFrame 输出中获取值并将其存储在目标表的 max_date 列中 另外,我不认为你是通过 pandas 插入数据的。那是你我之前没有提到它。通常,pandas 有 to_sql 方法。 y 是引号中的表名吗?它只是表中的一列吗?如果列已经存在,试图看看为什么 psycopg 会给你那个错误 【参考方案1】:

我认为这就是您要做的:从您的第一个查询中获取相应表的 max_date,然后将其插入到一个新表中,在该表中,您有各种表名作为一列和相应的 max_dates作为另一列。

获取table_name的max_date:

max_date = df["max_date"][0]

在这里使用字符串插值来构造带有max_date 值的插入语句。这将使用您刚刚从第一个查询中获得的 max_date

dwh_cur.execute(f"insert into new_table (table_name, max_date) values(table_name, max_date)")

【讨论】:

欢迎来到 Stack Overflow。 Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它是如何解决问题的。请编辑您的答案以解释此代码的作用以及它如何回答问题,以便它对 OP 以及其他有类似问题的用户有用。

以上是关于将 Pandas Dataframe 的输出插入 Redshift 表的主要内容,如果未能解决你的问题,请参考以下文章

pandas将列表list插入到dataframe的单元格中pandas使用read_csv函数读取文件并设置保留数值的前置0( leading zeroes)

将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)

Pandas:DataFrame数据的更改插入新增的列和行

Pandas:将 DataFrame 与嵌套数组结合或合并 JSON 输出

如何将阈值应用于 pandas DataFrame 列并输出阈值之外的行?

使用自定义名称将多个pandas DataFrame输出为CSV