自动将 csv 转储到新的 Postgres 表中[重复]
Posted
技术标签:
【中文标题】自动将 csv 转储到新的 Postgres 表中[重复]【英文标题】:Automate csv dump into new Postgres tables [duplicate] 【发布时间】:2019-01-29 23:11:08 【问题描述】:我有数千个 csv,每个 csv 有超过 10000 条记录。我正在寻找以最少的时间和精力将这些数据转储到 Postgres DB 表中的最有效方法。
【问题讨论】:
您在搜索中找到了哪些方法?他们是怎么解决的? 类似问题已经得到解答。请看-***.com/questions/30050097/…,也请看***.com/questions/12646305/… 它与之前打开的问题不同,因为:旧问题为您提供了一种将单个 csv 文件导入 postgres 的方法。但就我而言,我想自动导入大量文件,其中涉及 2 个手动过程: 1. 创建一个新表 2. 将 csv 导入这个新表。我想通过自动化在一个过程中为数千个文件完成这两个步骤。 换句话说,我希望能够即时创建表并将表名指定为源文件名,然后将源文件中的数据导入为大量文件创建的表中。 @sulabhchaturvedi 您提供的链接可以解决通过手动创建表将单个文件导入新表的问题。但我的问题不同。 【参考方案1】:COPY 通常是最好的解决方案。取决于您的限制条件。
COPY table_name FROM 'path_readable_by_postgres/file.cvs';
您可以cat
您的文件在一个大文件中快速导入数据。
查看https://www.postgresql.org/docs/current/static/sql-copy.html了解更多详情。
【讨论】:
也在这里回答:***.com/questions/2987433/… @zeevb 指出这与链接中其他用户提供的答案相同 我有数千个文件。我不想手动添加所有文件名。另外,要使此命令起作用,我已经需要创建表,而我没有。如果我要手动创建,我必须创建数千个表,这将非常耗时。【参考方案2】:您可以使用 pandas 库来读取和转换数据(如果需要),使用 sqlalchemy 创建 postgres 引擎,使用 psycopg2 将数据加载到 postgresql 中。我假设您已经在 Postgres DB 中创建了表。试试下面的代码
import pandas as pd
from sqlalchemy import create_engine
import pandas as pd
import psycopg2
# Drop "Unnamed: 0", as it often causes problems in writing to table
pd.read_csv(path/to/file.csv, index_col=index_column).drop(["Unnamed: 0"], axis=1)
# Now simply load your data into database
engine = create_engine('postgresql://user:password@host:port/database')
try:
pd_table.to_sql('name_of_table_in_postgres_db', engine, if_exists='append')
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
print('Closed connection to the database')
【讨论】:
所以,我还没有创建表。上面的代码读取一个 csv 并将其转储到一个新表中,我可以将它循环出所有文件? 以上代码在行engine = try:中抛出错误engine = try:
你为什么在这里使用赋值?
engine = try:
--- 抱歉,我丢失了一些代码,现在应该可以了
上面的代码将一个 csv 添加到之前创建的 postgresql 表中。您可以循环它以将所有 csv 文件添加到表中。以上是关于自动将 csv 转储到新的 Postgres 表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Pandas 中连接 Excel 文件表,以 CSV 格式每 1 行将大型 Pandas 数据框导出到新的 Excel 文件。自动化?