Python 插入數據庫的各種方式


我們在使用 python 寫程序的時候,都會用到數據庫,那么在操作過程中我們都會進行插入數據,那么現在我介紹幾種 python 插入數據的方式。

add方式

from sqlalchemy.orm import scoped_session, sessionmaker

db_conn = scoped_session(sessionmaker())

company = Company()
company.id = 1
company.name = 'NAME '
db_conn.add(company)
db_conn.commit()

bulk_save_objects方式

company = list()
for i in data:
    company.append(Company(**i))
pg_con.bulk_save_objects(company)

bulk_insert_mappings方式

pg_con.bulk_insert_mappings(Company, data)

engine.execute方式

from sqlalchemy import create_engine

pg_con = create_engine('postgresql://postgres:xxxxxxxxxxxxxxxxx@10.44.99.101:5432/situation')
pg_con.engine.execute(
    Company.__table__.insert(),
    data
)
pg_con.commit()

copy_from方式

from io import StringIO
import psycopg2

conn = psycopg2.connect(host="10.44.99.123", port="5432", user="postgres", password="xxxxxxxxxxxxxxxxxx",
                        database="xxxxx")

f = StringIO()

    for i in data:
        sql_line = u"{0}\t{1}\n"
        event_id = i.get("event_type", 1)
        name = i.get("nmae", 1)
        sql_line = sql_line.format(event_id, name)

        f.write(sql_line)

    f.seek(0)

    cur = conn.cursor()
    cur.copy_from(f, "t_warn_msg", columns=("event_id", "nmae"), sep='\t', null='\\N', size=16384)

    conn.commit()

 他們之間的性能差距很大

最慢的就是 add 方式

次慢 bulk_save_objects 方式

慢的  bulk_insert_mappings 方式

快的  engine.execute 方式

最快的  copy_from 方式

如果 使用 bulk_insert_mappings  插入10W條數據需要10秒,那么使用 copy_from  方式只需要1秒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM