【问题标题】:Inserting output from Pandas Dataframe to a Redshift table将 Pandas Dataframe 的输出插入 Redshift 表
【发布时间】: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 会给你那个错误

标签: pandas amazon-redshift psycopg2


【解决方案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 以及其他有类似问题的用户有用。
猜你喜欢
  • 2018-12-12
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2020-08-05
  • 2020-10-04
  • 2021-06-27
相关资源
最近更新 更多