Mysql數據庫服務器4核,批量寫入1萬條數據、每條數據4個字段 性能測試:
1、常規for循環一條條寫入 (這種方式波動比較大,基本在60-120s之間)
startTime = time.time() for i in range(10000): db.session.add( Test( blog_name='阿湯博客{}'.format(i), blog_url='http://www.cbrgn.com/'.format(i), blog_desc='我是阿湯博客,地址是http://www.cbrgn.com/'.format(i), create_time=datetime.datetime.now() ) ) db.session.commit() endTime = time.time() diff = round(endTime - startTime, 3) print("耗時:{}s").format(diff) 耗時:95.468s
2、通過bulk_save_objects批量寫入
startTime = time.time() db.session.bulk_save_objects( [ Test( blog_name='阿湯博客{}'.format(i), blog_url='http://www.cbrgn.com/'.format(i), blog_desc='我是阿湯博客,地址是http://www.cbrgn.com/'.format(i), create_time=datetime.datetime.now() ) for i in range(10000) ] ) endTime = time.time() diff = round(endTime - startTime, 3) print("耗時:{}s").format(diff) 耗時:0.695s
3、通過bulk_insert_mappings批量寫入
startTime = time.time() db.session.bulk_insert_mappings( Test, [ dict( blog_name='阿湯博客{}'.format(i), blog_url='http://www.cbrgn.com/'.format(i), blog_desc='我是阿湯博客,地址是http://www.cbrgn.com/'.format(i), create_time=datetime.datetime.now() ) for i in range(10000) ] ) endTime = time.time() diff = round(endTime - startTime, 3) print("耗時:{}s").format(diff) 耗時:0.658s
4、原生insert批量寫入
startTime = time.time() db.session.execute( Test.__table__.insert(), [ { "blog_name": '阿湯博客{}'.format(i), "blog_url": 'http://www.cbrgn.com/'.format(i), "blog_desc": '我是阿湯博客,地址是http://www.cbrgn.com/'.format(i), "create_time": datetime.datetime.now() } for i in range(10000) ] ) endTime = time.time() diff = round(endTime - startTime, 3) print("耗時:{}s").format(diff) 耗時:0.434s
總得來說,只要不是使用第一種方式批量寫入,基本上不會有太大的性能問題。