使用python将csv文件数据导入plsql表

时间:2019-06-20 12:59:13

标签: python linux

我有一个包含60000行的csv文件。我需要将此数据插入到postgres数据库表中。有什么方法可以减少从文件到数据库的数据插入而无需循环的时间?请帮我 Python版本:2.6

Database : postgres
 table: keys_data

 File Structure
1,ED2,'FDFDFDFDF','NULL'
2,ED2,'SDFSDFDF','NULL

2 个答案:

答案 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()