Как хранить очень длинные целые числа в python sqlite3? - PullRequest
0 голосов
/ 18 марта 2020
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('CREATE TABLE "test_table" (number INTEGER)')
c.execute('INSERT INTO test_table (number) VALUES (?)', (9223372036854775807,))  # the max integer size sqlite3 supports'

# this works
c.execute("SELECT * FROM test_table")
print(c.fetchall())

# this does not. OverflowError: Python int too large to convert to SQLite INTEGER
c.execute('INSERT INTO test_table (number) VALUES (?)', (int(f'1{"0" * 100}'),))

Я столкнулся с ограничением с sqlite3. Мне нужно иметь возможность хранить безумно длинные номера. Дольше, чем предел sqlite3 в 9223372036854775807. Решение, которое я задумал, было вместо хранения целого числа, я сохраняю строку, которая является строковой формой переданного целого числа python, а затем int() возвращается при запросе. Однако я не могу выбрать с помощью ORDER BY. В противном случае он упорядочивается в алфавитном порядке, а не в ожидаемом порядке. Есть ли решение для хранения больших целых чисел или SELECT с ORDER BY без запроса всей базы данных вручную?

1 Ответ

2 голосов
/ 18 марта 2020

Если вы добавляете нули к своим целым числам, чтобы все имели одинаковую ширину (например, 100 цифр, если вы знаете, что это ваш максимум), то алфавитный порядок будет соответствовать числовому порядку.

...