En complément de la réponse de dan04, si vous souhaitez insérer aveuglément un NUMERIC
autre que zéro représenté par un TEXT
mais assurez-vous que le texte est convertible en numérique:
your_numeric_col NUMERIC CHECK(abs(your_numeric_col) <> 0)
Le cas d'utilisation typique est dans une requête d'un programme qui traite toutes les données comme du texte (pour l'uniformité et la simplicité, puisque SQLite le fait déjà). La bonne chose à ce sujet est que cela permet des constructions comme celle-ci:
INSERT INTO table (..., your_numeric_column, ...) VALUES (..., some_string, ...)
ce qui est pratique dans le cas où vous utilisez des espaces réservés car vous n'avez pas à gérer spécialement ces champs numériques non nuls. Un exemple utilisant le sqlite3
module de Python serait,
conn_or_cursor.execute(
"INSERT INTO table VALUES (" + ",".join("?" * num_values) + ")",
str_value_tuple) # no need to convert some from str to int/float
Dans l'exemple ci-dessus, toutes les valeurs de str_value_tuple
seront échappées et placées entre guillemets sous forme de chaînes lorsqu'elles sont transmises à SQlite. Cependant, comme nous ne vérifions pas explicitement le type via TYPEOF
mais uniquement la convertibilité en type , cela fonctionnera toujours comme vous le souhaitez (c'est-à-dire que SQLite le stockera sous forme numérique ou échouera dans le cas contraire).