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秒

  • 相关阅读:
    常见的排序算法(四):归并排序
    常见的排序算法(三):快速排序
    常见的排序算法(二):选择排序
    a标签没有闭合引起自动插入很多a标签的问题
    js笔记
    Vue笔记
    CSS笔记
    bootstrap--网格化布局
    backgroud图片充满元素的方法
    bootstrap--概述
  • 原文地址:https://www.cnblogs.com/shangwei/p/15654553.html
Copyright © 2011-2022 走看看