Veritabanı şemanızı bir kez daha kontrol edin. Datatypes in SQLite Version 3 numaralı belgede belgelendiği gibi, sütun türü adı, değerlerin saklanmadan önce nasıl işlendiğini etkiler.
İşte bir bellek içi veri tabanını kullanarak, göstermek için bir Python programı:
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])
çıkışı şudur: Sütun aslında bir tamsayı türüdür gibi
i r t b
796 796.0 u'0796' u'0796'
Yani görünüyor. Şema tanımına bir bakın (sqlite3 database.db .schema
komut satırından çalışır), yeniden documentation'a bakın ve METİN yakınlığına eşlenen tür adlarından birini kullandığınızdan emin olun. Bilinmeyen tür isimler INTEGER yakınlığına sahip olur.
Kendi durumunda, varsayılan INTEGER yakınlığıyla biten 'STR' kullanıyordum. 'TEXT' olarak değiştirdim ve SQLite baştaki sıfırlarıma saymaya başladı.
Dizeleri programlı olarak ekliyorum. Öyleyse, SQLite'de baştaki sıfırları içeren bir sayıyı saklamanın bir yolu var mı? – ram
Sonunda, DB'ye numara eklemeden önce numaraya bir belirteç ekleyerek ve DB'den numarayı aldıktan sonra belirteci kaldırarak sorunu hackledim. Ancak çok yavaş olan String manipülasyon gerektirir. – ram