1

pysqlite を使用して、ユーザー定義型を比較の値としてどのように使用できますか。g: 「... WHERE columnName > userType」?

たとえば、必要な登録、コンバーターなどを使用して bool 型を定義しました。Pysqlite/Sqlite は、INSERT および SELECT 操作に対して期待どおりに応答します (bool 'True' は整数 1 として格納され、True として返されます)。

ただし、bool が「SELECT * from tasks WHERE display = True」または「... WHERE display = 'True」で使用されている場合は失敗します。最初のケースでは、Sqlite は True という名前の列がないというエラーを報告します。2 番目のケースでは、レコードは返されません。True の代わりに 1 を使用すると、選択が機能します。pysqlite 独自の日付およびタイムスタンプ アダプターを使用する場合、同じ問題があるようです。

このユーザー タイプや他のユーザー タイプに対してこの動作を回避することはできますが、それほど面白くありません。この特定の壁に頭をぶつけ続けないように、クエリでユーザー定義型を使用できるかどうかを知りたいです。

ありがとうございました。

4

2 に答える 2

1

変数をクエリに渡す正しい方法を使用します。クエリを作成せず、疑問符を使用して、パラメータをタプルとしてに渡しますexecute()

myvar = True
cur.execute('SELECT * FROM tasks WHERE display = ?', (myvar,))

そうすれば、sqliteドライバーは値を直接使用します。エスケープ、引用、変換はもう必要ありません。

文字列、整数など、すべてのパラメーターにこの手法を使用します。これにより、SQLインジェクションが自動的に回避されます。

于 2009-03-04T17:27:33.887 に答える
0

おそらく正しい型にキャストする必要があります。「SELECT * FROM tasks WHERE (display = CAST ('True' AS bool))」を試してください。

于 2009-03-04T14:17:11.893 に答える