使用python将csv文件数据导入plsql表
我有一个包含60000行的csv文件。我需要将此数据插入postgres数据库表。是否有任何方法可以减少将数据从文件插入数据库而不发生循环的时间?请帮帮我 Python版本:2.6使用python将csv文件数据导入plsql表,python,linux,Python,Linux,我有一个包含60000行的csv文件。我需要将此数据插入postgres数据库表。是否有任何方法可以减少将数据从文件插入数据库而不发生循环的时间?请帮帮我 Python版本:2.6 Database : postgres table: keys_data File Structure 1,ED2,'FDFDFDFDF','NULL' 2,ED2,'SDFSDFDF','NULL Postgres可以将CSV直接读取到带有的表中。这要求您能够将文件直接放在Postgres服务器上,或者数据
Database : postgres
table: keys_data
File Structure
1,ED2,'FDFDFDFDF','NULL'
2,ED2,'SDFSDFDF','NULL
Postgres可以将CSV直接读取到带有的表中。这要求您能够将文件直接放在Postgres服务器上,或者数据可以通过
COPY FROM STDIN
连接进行管道传输
Postgres命令行客户端中的\copy
命令将在本地读取文件并使用copy FROM STDIN
插入,因此这可能是最简单(也是最快)的方法
注意:这不需要使用Python,它是Postgres中的本机功能,并非所有或大多数其他RDB都具有相同的功能。我执行过类似的任务,唯一的例外是我的解决方案是基于Python 3.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()
为什么你认为循环会增加时间?无论使用何种工具,您都必须读取所有行并插入所有行。我将使用
csv
模块解析输入文件,executemany
批量插入行,并最终commit
每隔n行限制回滚文件的大小。其他可能的优化:插入之前删除索引,插入之后(重新)创建索引。您需要进行基础研究并做出努力。另请参见和。请提供示例方法,我对这些概念非常陌生。我从“/usr1/proj/bray/sql/country_data”中找到了此代码副本country;bit如何从python执行此操作script@sireeshaj为什么需要从Python脚本执行此操作?就像我提到的,你可能只需要使用Postgres前端。例如,\copy keys\u data from yourdata.csv
在我的要求中,我应该只从脚本中执行