zoukankan      html  css  js  c++  java
  • 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秒

  • 相关阅读:
    XML 文档(1, 2)中有错误:不应有 <xml xmlns=''>
    工厂模式、控制反转及依赖注入
    [译]新的CCSDS图像压缩推荐标准
    关于C#的静态类和静态构造函数
    c++友元函数与友元类
    malloc/free 与 new/delete 比较
    C++ main函数命令行参数使用
    进程和线程的区别
    堆和栈的区别
    java与C++的区别
  • 原文地址:https://www.cnblogs.com/shangwei/p/15654553.html
Copyright © 2011-2022 走看看