PostgreSQLは「強い型」です。つまり、すべてのクエリのすべての値には、明示的に定義されたもの(たとえば、テーブルの列の型)または暗黙的に定義されたもの(たとえば、 WHERE
> 句)。 =
を含むすべての関数と演算子 、特定のタイプを受け入れるように定義する必要があります。たとえば、 VarChar =VarChar
の演算子があります。 、および int =int
の場合は別のもの 。
あなたの場合、タイプ int
として明示的に定義された列があります 、ただし、PostgreSQLがタイプ text
として解釈した値と比較しています。 。
一方、SQLiteは「弱く型付け」されています。値は、実行されているアクションに最適な型として自由に扱われます。したがって、開発SQLiteデータベースでは、操作 '42' =42
PostgreSQLはVarChar=int
の特定の定義を必要とする場合に問題なく計算できます。 (または text =int
、 text
PostgreSQLの無制限文字列のタイプです。
これで、PostgreSQLは時々 有用であり、値を自動的に「キャスト」して、型を既知の演算子と一致させますが、ヒントが示すように、多くの場合、明示的に行う必要があります。 SQLを自分で記述している場合、明示的な活字ケースは WHERE id =CAST('42'AS INT)
のようになります。 (または WHERE CAST(id AS text)='42'
。
そうではないので、クエリジェネレータに入力する入力が、数字で構成される文字列だけでなく、実際の整数であることを確認する必要があります。これはfields.IntegerField
を使用するのと同じくらい簡単だと思います fields.CharField
ではなく 、しかし私は実際にはDjangoやPythonさえ知らないので、そこからそれを取得できることを願って背景を説明したいと思いました。