是否可以sqlite3在运行时获得支持的最大列数?使用编译时变量建立此数据库限制SQLITE_MAX_COLUMN(请参阅限制).默认值通常为2000列.
我正在寻找可从Python或SQL界面访问的东西.
从实际角度看这似乎是不可能的(即没有像dan04那样非常出色的答案的非常昂贵的蛮力方法).
源(1,2)的sqlite3模块不包含参考要么SQLITE_MAX_COLUMN或编译时在一般限值; 似乎没有任何方法可以从SQL界面中访问它们.
更新:
使用二进制搜索的dan04解决方案的简单修改大大加快了速度:
import sqlite3
def max_columns():
db = sqlite3.connect(':memory:')
low = 1
high = 32767 # hard limit <http://www.sqlite.org/limits.html>
while low < high - 1:
guess = (low + high) // 2
try:
db.execute('CREATE TABLE T%d (%s)' % (
guess, ','.join('C%d' % i for i in range(guess))
))
except sqlite3.DatabaseError as ex:
if 'too many columns' in str(ex):
high = guess
else:
raise
else:
low = guess
return low
Run Code Online (Sandbox Code Playgroud)
通过上面的代码运行timeit.repeat():
>>> max_columns()
2000
>>> import timeit
>>> timeit.repeat(
... "max_columns()",
... setup="from __main__ import max_columns",
... number=50
... )
[10.347190856933594, 10.0917809009552, 10.320987939834595]
Run Code Online (Sandbox Code Playgroud)
...平均运行时间为30.76/150 = 0.205秒(在2.6 GHz四核机器上) - 不是很快,但可能比"踢它"的15-20秒更有用它打破了"从一个方法计数".