sqlalchemy批量插入数据(性能问题)
时间:2021-02-23 14:19:41
收藏:0
阅读:0
简介
在某些场景下,我们需要在一瞬间插入大量数据的情况下,我们要使用一些性能比较好的方式来插入数据,这样才能保证接口的时间。下面测试的数据是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
评论(0)