5

这是一个小问题,但我有点难过。

sqlite 对查询参数的数量有 999 个硬限制。这是在不属于公共头文件的标头中设置的,运行时使您能够降低限制,但不超过硬限制。Snow Leopard(显然还有 Lion)上的 Python sqlite3 模块允许比这更多的参数,但是,我无法弄清楚这是怎么可能的。

我考虑了 Python 包装器自己进行参数替换并将完整语句传递给 sqlite3 的可能性;但据我从源代码中可以看出,这并没有发生。我还考虑了在 Snow Leopard 上实现 sqlite3 是从稍微不同的源代码编译而来的可能性;但事实证明,Apple 发布了其开源修改(请参阅http://opensource.apple.com/source/SQLite/SQLite-74.11/),并且其源中的参数限制与默认值相同。

如果有人知道这可能是如何发生的(我确信它正在发生;我已经创建了带有 2000 个参数的语句并且它们工作正常),请插话。不管它的价值是什么,我遇到了这个奇怪的事情,因为相同的由于参数限制,Windows 上的代码中断。

4

1 回答 1

1

在构建完整的 SQLite (C) 源代码时,预处理器定义

SQLITE_MAX_VARIABLE_NUMBER

控制“语句变量”的最大数量,默认值为 999。

更多信息可以在这里找到:https ://sqlite.org/limits.html

我会假设 python 绑定使用更高数量的 SQLite 自定义构建。


(关于 999 个参数的强制性说明绰绰有余,而且您正在做一些奇怪的事情 - 或不寻常的事情。考虑发布您的用例,如果有关于合理数量的参数的建议。)

于 2015-06-12T15:47:43.387 回答