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秒

原文地址:https://www.cnblogs.com/shangwei/p/15654553.html