व्यावहारिक शर्तों में यह असंभव प्रतीत होता है (यानी dan04 के शानदार जवाब के साथ-साथ एक बहुत महंगा ब्रूट-बल दृष्टिकोण के बिना)।
स्रोत (1, 2) sqlite3
मॉड्यूल के लिए या तो SQLITE_MAX_COLUMN
करने के लिए या संकलन समय के लिए सामान्य रूप में सीमा में कोई चर्चा नहीं होता है; न तो एसक्यूएल इंटरफेस के भीतर से उन्हें एक्सेस करने का कोई तरीका नहीं दिखता है।
अद्यतन:
एक द्विआधारी खोज का उपयोग करने 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 गीगाहर्ट्ज़ क्वाड-सह पर पुनः मशीन) - बिल्कुल तेज नहीं है, लेकिन "इसे लात मारने" के 15-20 सेकेंड से अधिक उपयोग करने योग्य होने की संभावना है "यह एक विधि से गिनती है।
स्रोत
2013-07-26 04:31:00
बहुत बढ़िया दृष्टिकोण, +1! –