我们在使用 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秒