2012-04-26 50 views
5

這是一個小問題,但我很難過。Snow Leopard中SQLite max查詢參數有所不同?

sqlite對查詢參數的數量有999個限制。這是在頭文件中設置的,它不是公共頭文件的一部分,運行時允許您降低限制但不超過硬限制。 Snow Leopard上的Python sqlite3模塊(以及Lion顯然)允許使用比這更多的參數,但是,我無法弄清楚這是怎麼可能的。

我認爲Python包裝器本身正在進行參數替換並將完整語句傳遞給sqlite3的可能性;但據我從源代碼可以看出,這並沒有發生。我還考慮過在雪豹上實施sqlite3的可能性是由稍微不同的源代碼編譯的;但事實證明,Apple發佈了其開源修改(請參閱http://opensource.apple.com/source/SQLite/SQLite-74.11/),並且其源中的參數限制與默認設置相同。

如果有人對此有何想法(我確信它正在發生;我創建了具有2000個參數的語句,並且它們工作正常),請插入其中。對於它的價值,我遇到了這個問題由於參數限制,因爲相同的代碼在Windows上中斷,所以很奇怪。

+0

您是否檢查過哪一個是Snow-Leopard的實際限制?如果你把一個荒謬的高數字記憶的行爲如何? – dsign 2012-04-26 11:49:56

+0

好主意。完全是雪豹上的數字是500000。 500001休息。 – 2012-05-15 12:13:23

回答

1

在構建完整的SQLite的(C)的來源,預處理器定義

SQLITE_MAX_VARIABLE_NUMBER 

控制「聲明變量」的最大數量,默認值是可以在這裏找到999

更多信息:https://sqlite.org/limits.html

我會假設python綁定使用自定義版本的SQLite與更高的數字。


(強制性注約999參數比還有更多,而你正在做一些奇怪的 - 或不尋常的考慮發佈您的使用情況和是否有有關參數MROE合理數量的建議。)