私のテーブルスキーマでは:
... disabled BOOLEAN, ...
データベースに接続する場合:
db = sqlite3.connect(f, detect_types=sqlite3.PARSE_DECLTYPES)
sqlite3.register_converter("BOOLEAN", myfunc)
次のようにレコードを挿入します。
INSERT INTO mytable (disabled, ...) VALUES (:disabled, ...)
disabled: False を含むパラメーター dict と共に。
そのレコードを読み返すと、BOOLEAN 型を変換するために myfunc が呼び出されます。
def myfunc(x):
print x, type(x)
結果:(0, <type 'str'>
もちろん、Falseが必要な場合はTrueと評価されます)
bool を 1 バイトの INTEGER として保存したいのですが、レコードを読み取るときに単純に Python bool に変換したいだけです (コードの他の部分では int ではなく bool が必要です)。SQLite はそれらを文字列として保存していますか、それとも myfunc を呼び出す前に文字列に変換していますか? なんで?
PS - を使用してみsqlite3.register_adapter(bool, int)
ましたが、役に立ちませんでした。