Como una adición a la respuesta de dan04, si desea insertar ciegamente un NUMERICotro que no sea cero representado por un, TEXTpero asegúrese de que el texto sea convertible a numérico:
your_numeric_col NUMERIC CHECK(abs(your_numeric_col) <> 0)
El caso de uso típico es una consulta de un programa que trata todos los datos como texto (para uniformidad y simplicidad, ya que SQLite ya lo hace). Lo bueno de esto es que permite construcciones como esta:
INSERT INTO table (..., your_numeric_column, ...) VALUES (..., some_string, ...)
lo cual es conveniente en caso de que esté usando marcadores de posición porque no tiene que manejar campos numéricos distintos de cero especialmente. Un ejemplo usando el sqlite3módulo de Python sería,
conn_or_cursor.execute(
"INSERT INTO table VALUES (" + ",".join("?" * num_values) + ")",
str_value_tuple) # no need to convert some from str to int/float
En el ejemplo anterior, todos los valores de str_value_tuplese escaparán y se citarán como cadenas cuando se pasen a SQlite. Sin embargo, dado que no estamos verificando explícitamente el tipo a través, TYPEOFsino solo la convertibilidad a tipo , seguirá funcionando como se desee (es decir, SQLite lo almacenará como numérico o fallará de otra manera).