码迷,mamicode.com
首页 > 数据库 > 详细

sqlalchemy批量插入数据(性能问题)

时间:2021-02-23 14:19:41      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:cep   loop   def   else   color   lse   插入数据   tab   简介   

简介

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

 

sqlalchemy批量插入数据(性能问题)

标签:cep   loop   def   else   color   lse   插入数据   tab   简介   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!