zoukankan      html  css  js  c++  java
  • sqlalchemy批量插入数据(性能问题)

    简介

    在某些场景下,我们需要在一瞬间插入大量数据的情况下,我们要使用一些性能比较好的方式来插入数据,这样才能保证接口的时间。下面测试的数据是1.6W条数据的时间。

    sqlalchemy批量插入数据

    方式一:

        @staticmethod
        def save_data(data, pg_con=None):
            try:
                pg_con = pg_con if pg_con else g.pg_db
                for i in data:
                    loophole = Loophole(**i)
                    pg_con.add(loophole)
                pg_con.commit()
                return True
            except Exception, e:
                logging.error('class path: %s;function name: %s;error message:%s' % (
                    __name__, sys._getframe().f_code.co_name, e.message), exc_info=True)
    pg_con.rollback()
    return False

    注:此方式是最慢的

    方式二:

        @staticmethod
        def save_data(data, pg_con=None):
            try:
                pg_con = pg_con if pg_con else g.pg_db
                loopholes = list()
                for i in data:
                    loopholes.append(Loophole(**i))
                pg_con.bulk_save_objects(loopholes)
                pg_con.commit()
                return True
            except Exception, e:
                logging.error('class path: %s;function name: %s;error message:%s' % (
                    __name__, sys._getframe().f_code.co_name, e.message), exc_info=True)
    pg_con.rollback()
    return False

    注:如果在数据量超大的时候 ,我们可以在每 1000 条的时候 bulk_save_objects 一次。

     方式三:

        @staticmethod
        def save_data(data, pg_con=None):
            try:
                pg_con = pg_con if pg_con else g.pg_db
                pg_con.bulk_insert_mappings(Loophole, data)
                pg_con.commit()
                return True
            except Exception, e:
                logging.error('class path: %s;function name: %s;error message:%s' % (
                    __name__, sys._getframe().f_code.co_name, e.message), exc_info=True)
                pg_con.rollback()
                return False

    方式四:

        @staticmethod
        def save_data(data, pg_con=None):
            try:
                pg_con = pg_con if pg_con else g.pg_db
                pg_con.execute(
                    Loophole.__table__.insert(),
                    data
                )
                pg_con.commit()
                return True
            except Exception, e:
                logging.error('class path: %s;function name: %s;error message:%s' % (
                    __name__, sys._getframe().f_code.co_name, e.message), exc_info=True)
                pg_con.rollback()
                return False
  • 相关阅读:
    DPK880 打印机 驱动正确安装不反应。
    VB6.0 获取N位有效数字方法
    Asp.Net开发小技巧汇总
    Microsoft SqlServer生成表数据Insert语句
    dell 服务器重装
    编程应该注意
    FIRST
    SharedObject使用:在FluorineFx.net与Flex中使用共享对象维护在线用户列表实例
    Flex与As3学习笔记之:Part 3 函数参数、字符串处理、日期与时间类型
    Flex与As3学习笔记之:Part 1 Flex语言基础
  • 原文地址:https://www.cnblogs.com/shangwei/p/14430930.html
Copyright © 2011-2022 走看看