In aggiunta alla risposta da dan04, se vuoi inserire ciecamente un NUMERICdiverso da zero rappresentato da a TEXTma assicurati che il testo sia convertibile in un numerico:
your_numeric_col NUMERIC CHECK(abs(your_numeric_col) <> 0)
Il caso d'uso tipico è in una query da un programma che tratta tutti i dati come testo (per uniformità e semplicità, poiché SQLite lo fa già). La cosa bella di questo è che consente costrutti come questo:
INSERT INTO table (..., your_numeric_column, ...) VALUES (..., some_string, ...)
il che è comodo nel caso in cui si utilizzino segnaposto perché non è necessario gestire in modo speciale questi campi numerici diversi da zero. Un esempio che utilizza il sqlite3modulo di Python potrebbe essere,
conn_or_cursor.execute(
"INSERT INTO table VALUES (" + ",".join("?" * num_values) + ")",
str_value_tuple) # no need to convert some from str to int/float
Nell'esempio precedente, tutti i valori in str_value_tupleverranno sottoposti a escape e citati come stringhe quando vengono passati a SQlite. Tuttavia, poiché non stiamo controllando esplicitamente il tipo tramite TYPEOFma solo la convertibilità in tipo , funzionerà comunque come desiderato (cioè, SQLite lo memorizzerà come un numero o fallirà altrimenti).