Jaki jest poprawny sposób wstawiania wartości liczby całkowitych obiektów do baz danych w pythonie 3? W Pythonie 2.7 NumPy typy danych numerycznych włóż czysto w SQLite, ale nie w Pythonie 3wstawianie liczb całkowitych typu numpy do sqlite z python3
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
The np.float typów wydają się nadal działać dobrze zarówno w 2 i 3.
conn.execute("insert into foo values(?)", (np.float64(101),))
W pythonie 2, numpy liczb całkowitych skalarnych nie są już instancjami int, nawet konwertującymi liczb całkowitoliczbowych liczb zmiennoprzecinkowych na ints.
isinstance(np.int64(1), int) # <- true for 2, false for python 3
Czy to dlatego dbapi nie działa już bezproblemowo z numpy?
numpy typu liczba całkowita jest nie tylko reprezentacją bajt liczby (to jest '.Item()' value); jest obiektem, prawie takim samym jak pojedynczy element, 0d, tablica. Więc nie sądzę, żebyś mógł go zapisać w całej swojej chytrej chwale w bazie danych. Można zapisać jego wartość całkowitą lub równoważnik bajtowy, ale nie pełny obiekt typu numpy. Czy jest coś w 'sqlite3' na temat zapisywania instancji obiektu zdefiniowanego przez użytkownika? – hpaulj
Zawsze istnieje przerażające podejście do pikowania (kierowanie na typ TEXT) lub coś bardziej nowoczesnego i binarnego, jak [MessagePack] (http://msgpack.org/) (kierowanie na typ BLOB). – sascha
Jaka jest korzyść z zapisywania 'np.int64 (100)' zamiast '100'? Czy są jakieś przydatne informacje, których nie można odzyskać podczas pobierania? Możesz przyjrzeć się, jak moduły takie jak SQLAlchemy obsługują interfejs obiektów sql. – hpaulj