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