В качестве дополнения к ответу от dan04, если вы хотите вслепую вставить NUMERIC
, отличное от нуля, представленного 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 сохранит его как числовой или выйдет из строя иначе). 1019 *