Як додаток до відповіді від dan04, якщо ви хочете сліпо вставити NUMERICінше, ніж нуль, представлене символом a, TEXTале переконайтесь, що текст можна перетворити на числовий:
your_numeric_col NUMERIC CHECK(abs(your_numeric_col) <> 0)
Типовий випадок використання - це запит програми, яка розглядає всі дані як текст (для рівномірності та простоти, оскільки SQLite це вже робить). Приємно в тому, що він дозволяє такі конструкції:
INSERT INTO table (..., your_numeric_column, ...) VALUES (..., some_string, ...)
що зручно, якщо ви використовуєте заповнювачі, оскільки вам не доведеться спеціально обробляти такі ненульові числові поля. Прикладом використання sqlite3модуля Python може бути:
conn_or_cursor.execute(
"INSERT INTO table VALUES (" + ",".join("?" * num_values) + ")",
str_value_tuple) # no need to convert some from str to int/float
У наведеному вище прикладі всі значення у str_value_tupleбуде уникнуто та цитується як рядки при передачі до SQlite. Однак, оскільки ми чітко не перевіряємо тип за допомогою, TYPEOFа лише конвертованість у тип , він все одно буде працювати за бажанням (тобто SQLite або зберігатиме його як числовий, або відмовляється інакше).