我有一个包含60000行的csv文件。我需要将此数据插入到postgres数据库表中。有什么方法可以减少从文件到数据库的数据插入而无需循环的时间?请帮我 Python版本:2.6
Database : postgres
table: keys_data
File Structure
1,ED2,'FDFDFDFDF','NULL'
2,ED2,'SDFSDFDF','NULL
答案 0 :(得分:1)
Postgres可以使用COPY
command将CSV直接读取到表中。这要么要求您能够直接在Postgres服务器上放置文件,要么可以通过与COPY FROM STDIN
的连接来传递数据。
Postgres的\copy
命令行客户端中的psql
命令将在本地读取文件并使用COPY FROM STDIN
进行插入,因此这可能是最简单(也是最快)的方法。
注意:这不需要使用Python,它是Postgres中的本机功能,并非所有或大多数其他RDB都具有相同的功能。
答案 1 :(得分:0)
我执行了类似的任务,唯一的例外是我的解决方案基于python3.x。我相信您可以找到该解决方案的等效代码。代码很容易说明。
from sqlalchemy import create_engine
def insert_in_postgre(table_name, df):
#create engine object
engine = create_engine('postgresql+psycopg2://user:password@hostname/database_name')
#push dataframe in given database engine
df.head(0).to_sql(table_name, engine, if_exists='replace',index=False )
conn = engine.raw_connection()
cur = conn.cursor()
output = io.StringIO()
df.to_csv(output, sep='\t', header=False, index=False)
output.seek(0)
contents = output.getvalue()
cur.copy_from(output, table_name, null="")
conn.commit()
cur.close()