SQLalchemy przekazuje mi następujące ostrzeżenie, gdy używam kolumny liczbowej z silnikiem bazy danych SQLite.Jak obsługiwać znaki dziesiętne w SQLalchemy i SQLite
SAWarning: Dialekt SQLite + pysqlite robi nie wsparcia dziesiętne obiektów natywnie
usiłuję dowiedzieć się najlepszym sposobem na pkgPrice = Column(Numeric(12,2))
w sqlalchemy jednocześnie przy użyciu SQLite.
To pytanie [1] How to convert Python decimal to SQLite numeric? pokazuje sposób użycia sqlite3.register_adapter(D, adapt_decimal)
, aby SQLite odebrał i zwrócił wartość dziesiętną, ale zapisał ciągi znaków, ale nie wiem, jak zagłębić się w rdzeń SQLAlchemy, aby to zrobić. Typ Dekoratory wyglądają jak właściwe podejście, ale jeszcze ich nie gram.
Czy ktoś ma przepis dekoratora typu SQLAlchemy, który będzie miał liczby numeryczne lub dziesiętne w modelu SQLAlchemy, ale przechowuje je jako ciągi w SQLite?
Mam nadzieję, że nie będziesz miał nic przeciwko, jeśli zasugeruję jedną małą zmianę w tobie. :) Zamiast powrocie wartość w process_result_value ja proponuję zrobić, jeśli oddział: def process_result_value (self, wartość, dialekt): jeśli wartość = "Brak": powrót D (wartość) else: return Brak – Tiho
@van, Czy próbowałeś kwerendy na swoich nowych kolumnach SqliteNumeric? Wynik nie jest poprawny, ponieważ porównywanie ciągów znaków jest zupełnie inne niż porównanie numeryczne. Jeśli wykonasz session.query (T) .filter (T.value> 100), zobaczysz. –
Ponadto myślę, że część load_dialect_impl jest niepotrzebna, biorąc pod uwagę, że zostały już określone impl = types.String –