1

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

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



PS我之前已经发布了这个问题,但是当我错误地认为我可能根本不会遇到这个问题时删除了它。可悲的是,事实并非如此。

4

1 回答 1

2

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

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

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

于 2010-07-17T10:45:54.170 回答