Als Ergänzung zur Antwort von dan04, wenn Sie blind eine NUMERIC
andere als die durch a dargestellte Null einfügen möchten, TEXT
aber sicherstellen möchten, dass der Text in eine Zahl konvertierbar ist :
your_numeric_col NUMERIC CHECK(abs(your_numeric_col) <> 0)
Ein typischer Anwendungsfall ist eine Abfrage eines Programms, das alle Daten als Text behandelt (aus Gründen der Einheitlichkeit und Einfachheit, da SQLite dies bereits tut). Das Schöne daran ist, dass es Konstrukte wie dieses erlaubt:
INSERT INTO table (..., your_numeric_column, ...) VALUES (..., some_string, ...)
Dies ist praktisch, wenn Sie Platzhalter verwenden, da Sie solche numerischen Felder ungleich Null nicht speziell behandeln müssen. Ein Beispiel für die Verwendung des Python- sqlite3
Moduls wäre:
conn_or_cursor.execute(
"INSERT INTO table VALUES (" + ",".join("?" * num_values) + ")",
str_value_tuple) # no need to convert some from str to int/float
Im obigen Beispiel werden alle Werte in str_value_tuple
maskiert und als Zeichenfolgen in Anführungszeichen gesetzt, wenn sie an SQlite übergeben werden. Da wir den Typ TYPEOF
jedoch nicht explizit über überprüfen, sondern nur die Konvertierbarkeit in Typ , funktioniert er weiterhin wie gewünscht (dh SQLite speichert ihn entweder als numerische Zahl oder schlägt anderweitig fehl).