将 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_date
s作为另一列。
获取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 与嵌套数组结合或合并 JSON 输出