Điều này dường như là không thể trong điều khoản thực tế (nghĩa là không có phương pháp tiếp cận vũ phu mạnh mẽ dọc theo dòng câu trả lời khá rực rỡ của dan04).
Nguồn (1, 2) cho các mô-đun sqlite3
không chứa tài liệu tham khảo hoặc để SQLITE_MAX_COLUMN
hoặc để biên dịch-thời hạn nói chung; dường như không có cách nào để truy cập chúng từ bên trong giao diện SQL.
UPDATE:
Một sửa đổi đơn giản của dan04's solution sử dụng tìm kiếm nhị phân tốc độ điều lên đáng kể:
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
Chạy mã trên qua 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]
.. . Thời gian chạy trung bình là 30,76/150 = 0,205 giây (trên quad-quad 2,6 GHz máy tái) - không chính xác nhanh, nhưng có khả năng sử dụng được nhiều hơn 15-20 giây của "đá" cho đến khi nó phá vỡ "phương pháp đếm-từ-một.
Nguồn
2013-07-26 04:31:00
cách tiếp cận Awesome, 1! –