gpt4 book ai didi

python - 从 sqlite3 确定最大列数

转载 作者:IT王子 更新时间:2023-10-29 06:27:45 26 4
gpt4 key购买 nike

是否有可能在运行时从 sqlite3 获取支持的最大列数?此数据库限制是通过编译时变量 SQLITE_MAX_COLUMN 建立的(参见 limits )。默认值通常为 2000 列。

我正在寻找可从 Python 或 SQL 界面访问的内容。

最佳答案

这在实践中似乎是不可能的(即,如果没有按照 dan04 相当出色的答案的非常昂贵的蛮力方法)。

sqlite3 模块的源代码(12)通常不包含对SQLITE_MAX_COLUMN 或编译时限制的引用;似乎也没有任何方法可以从 SQL 界面访问它们。

更新:

dan04's solution的简单修改使用二进制搜索可以大大加快速度:

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

通过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]

...平均运行时间为 30.76/150 = 0.205 秒(在 2.6 GHz 四核机器上)- 不完全是,但可能比 15 更可用-20 秒的“踢它直到它断了”从一个数的方法。

关于python - 从 sqlite3 确定最大列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17872665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com