dan04からの回答への追加として、aでNUMERIC
表されるゼロ以外を盲目的に挿入したいTEXT
が、テキストが数値に変換可能であることを確認する場合:
your_numeric_col NUMERIC CHECK(abs(your_numeric_col) <> 0)
典型的な使用例は、すべてのデータをテキストとして扱うプログラムからのクエリです(SQLiteは既にそうしているので、統一性と単純さのために)。これの良い点は、次のような構成が可能であることです。
INSERT INTO table (..., your_numeric_column, ...) VALUES (..., some_string, ...)
このようなゼロ以外の数値フィールドを特別に処理する必要がないため、プレースホルダーを使用している場合に便利です。Pythonのsqlite3
モジュールを使用した例は、
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は数値として格納するか、それ以外の場合は失敗します)。