Como una adición a la respuesta de dan04, si desea insertar ciegamente un NUMERIC
otro que no sea cero representado por un, TEXT
pero 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 sqlite3
mó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_tuple
se 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, TYPEOF
sino solo la convertibilidad a tipo , seguirá funcionando como se desee (es decir, SQLite lo almacenará como numérico o fallará de otra manera).