В качестве дополнения к ответу от 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 либо сохранит его как числовое, либо не сработает).