Nümerik tamsayı nesnelerinin değerlerini python 3'teki veritabanlarına yerleştirmenin doğru yolu nedir?nümerik tamsayı türlerini python3 ile sqlite içine ekleme
import numpy as np
import sqlite3
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE foo (id INTEGER NOT NULL, primary key (id))")
conn.execute("insert into foo values(?)", (np.int64(100),)) # <-- Fails in 3
np.float türleri 3'e hala hem 2 ve 3.
conn.execute("insert into foo values(?)", (np.float64(101),))
sadece iyi çalışır görünüyor python'da 2.7 numpy sayısal veri türleri sqlite içine temiz bir şekilde yerleştirin, ancak python yok Python 2'de, numpy skaler tamsayı veri türleri artık tamsayı değerli kayan nokta sayılarını ints'e dönüştürmez.
isinstance(np.int64(1), int) # <- true for 2, false for python 3
Bu neden dbapi artık numpy ile sorunsuz bir şekilde çalışmamaktadır? Sqlite3 Docs göre
bir numpy tamsayı türü (o en '.item()' değer) sayısının sadece bayt temsili değil; bir nesne, neredeyse tek bir öğe, 0d, dizi aynıdır. Bu yüzden, tüm saygısız zaferini bir veritabanında saklayabileceğinizi düşünmüyorum. Tam sayı değerini veya bazı bayt eşdeğerini kaydedebilir, ancak tam sayıdaki nesneyi kaydedemezsiniz. Sqlite3'te kullanıcı tanımlı nesne örneğini kaydetme konusunda bir şey var mı? – hpaulj
Her zaman korkutucu turşu yaklaşımı (TEXT türünü hedefleme) ya da [MessagePack] (http://msgpack.org/) (BLOB tipi hedefleme) gibi daha modern ve ikili tabanlı bir şey vardır. – sascha
'100' yerine' np.int64 (100) 'kaydetme avantajı nedir? Getirme sırasında kurtaramayacağınız bazı yararlı bilgiler var mı? SQLAlchemy gibi modüllerin sql-object arabirimini nasıl ele aldığına bakabilirsiniz. – hpaulj