SQLAlchemy和max_allowed_pa​​cket问题

时间:2010-07-16 17:54:04

标签: python mysql sqlalchemy large-query

由于我的应用程序的性质,我需要支持将大量数据快速插入到数据库中。使用executemany()可以提高性能,但有一点需要注意。例如,MySQL有一个名为max_allowed_pa​​cket的配置参数,如果我的插入查询的总大小超过其值,MySQL就会抛出错误。

问题#1 :有没有办法告诉SQLAlchemy将数据包分成几个较小的数据包?
问题#2 :如果其他RDBS有类似的限制,我该如何解决它们呢?



P.S。我之前发布过这个问题,但是当我错误地认为我可能不会遇到这个问题时就删除了它。可悲的是,事实并非如此。

1 个答案:

答案 0 :(得分:2)

我最近遇到了类似的问题并使用了 - 不是很优雅 - 解决方法:

  • 首先我将my.cnf解析为max_allow_packets的值,如果找不到,则将最大值设置为默认值。
  • 所有数据项都存储在列表中。
  • 接下来,对于每个数据项,我计算近似的字节长度(使用字符串,它是字符串的长度,以字节为单位,对于其他数据类型,我采用过去安全的最大字节数。)
  • 我把它们加起来,在达到约。 75%的max_allow_packets(因为SQL查询也会占用空间,只是为了安全起见。)

这种方法并不是很漂亮,但它对我来说完美无瑕。