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
  • 相关阅读:
    opencv-python下简单KNN分类识别
    眼下智能手机市场的一点感想
    利用base64库暴力破解base加密
    python爬虫 模拟登陆校园网-初级
    四月的街道
    bzoj 1212 [HNOI2004] L语言(不用AC自动机)
    bzoj 1567 [JSOI2008]Blue Mary的战役地图题解
    bzoj1789 Necklace Y型项链
    bzoj 1957 土地购买
    网络流24题做题日记
  • 原文地址:https://www.cnblogs.com/shangwei/p/14430930.html
Copyright © 2011-2022 走看看