python百萬級數(shù)據(jù)批量插入postgreSQL數(shù)據(jù)庫 copy_from()執(zhí)行效率完勝executemany()和to_sql()方法

(1)executemany()方法批量輸入數(shù)據(jù)到數(shù)據(jù)庫

? ? ? ? data是需要插入的數(shù)據(jù),為list類型,3列,數(shù)據(jù)條數(shù)有70多萬條

import psycopg2

conn = psycopg2.connect(host=***, port=***, database=***, user=***, password=***)

cur = conn.cursor()

sql =? "insert into " + table_name + " values(%s, %s, %s)

cur.executemany(sql, data)

conn.commit()

conn.close()

(2)datafame的to_sql()插入數(shù)據(jù)到數(shù)據(jù)庫

from sqlalchemy import create_engine

result = pd.DataFrame(data)

engine = create_engine('postgresql://user:password@host:port/database')

pd.io.sql.to_sql(result, table_name, engine, index = False, if_exists='append')

(3)強(qiáng)大的copy_from(),是postgresSQ的內(nèi)置函數(shù)

import psycopg2

from sqlalchemy import create_engine

import pandas as pd

from io import StringIO

data1 = pd.DataFrame(data)

# dataframe類型轉(zhuǎn)換為IO緩沖區(qū)中的str類型

output = StringIO()

data1.to_csv(output, sep='\t', index=False, header=False)

output1 = output.getvalue()


conn = psycopg2.connect(host=***, user=***, password=***, database=***)

cur = conn.cursor()

cur.copy_from(StringIO(output1), table_name1)

conn.commit()

cur.close()

conn.close()

print('done')

用copy_from()方法,70多萬條數(shù)據(jù)插入到數(shù)據(jù)庫僅僅需要0.06分鐘,相比于前兩種方法執(zhí)行效率高太多啦

嘗試了多張數(shù)據(jù)表循環(huán)批量插入,之前用executemany()需要15個小時才能插入完成的數(shù)據(jù),用copy_from()只需要90分鐘左右。

主要參考:

(https://blog.csdn.net/rongyongfeikai2/article/details/17935139?utm_source=blogxgwz5)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容