Дважды проверьте схему базы данных.Как описано в Типы данных в SQLite версии 3 , имя типа столбца влияет на то, как обрабатываются значения перед сохранением.
Вот программа Python для демонстрации с использованием базы данных в памяти:
import sqlite3
db = sqlite3.connect(':memory:')
val = "0796";
db.execute('CREATE TABLE test (i INTEGER, r REAL, t TEXT, b BLOB);')
db.execute('INSERT INTO test VALUES (?, ?, ?, ?);', (val, val, val, val))
res = db.execute('SELECT * FROM test');
print '\t'.join([x[0] for x in res.description])
for row in res.fetchall():
print '\t'.join([repr(x) for x in row])
Вывод:
i r t b
796 796.0 u'0796' u'0796'
Итак, похоже, что ваш столбец на самом деле является целочисленным типом.Взгляните на определение схемы (sqlite3 database.db .schema
работает из командной строки), посмотрите на документацию еще раз и убедитесь, что вы используете одно из имен типов, которые соответствуют привязке TEXT.Неизвестные имена типов получают сходство INTEGER.
В моем собственном случае я использовал 'STR', что в итоге приводит к сходству INTEGER по умолчанию.Я изменил его на «ТЕКСТ», и SQLite начал уважать мои ведущие нули.