当通过SQLA-表达语言的语句,FE将在MySQL-DB多行
Foo.__table__.insert().execute([{'bar': 1}, {'bar': 2}, {'bar': 3}])
it's的极端缓慢,相对于一个“原始”的SQL语句的执行完成同样的任务,即
engine.execute("insert into foo (bar) values (1),(2),(3)")
,这是什么原因呢? 不容SQLA产生一个BULK INSERT语句,因此执行多个插入? 由于ORM的速度极限,我需要一个快速的方法来一次添加几千行,但SQLA-表达语言,版本是太慢了。 所以,我需要我自己写的原始SQL? 该文档是不是太清楚这一点。
我跑与ORM刀片的速度测试,用预先指定的PK和SQLA批量插入的ORM(见SQLA批量插入速度 )这样的( https://gist.github.com/3341940 ):
- SQLAlchemy的ORM:总时间为500个记录9.61418914795秒
- SQLAlchemy的ORM PK给出:总时间为500个记录9.56391906738秒
- SQLAlchemy的核心:总时间为500记录9.5362598896秒
- SQLAlchemy的原始字符串执行:总时间为500个记录1.233677秒
正如你所看到的,实际上是三个版本没有任何区别。 只有原始字符串插入,所有的记录都包含在原始SQL语句的执行是显著更快。 因此,对于快速插入,SQLA似乎次优的。