データ型としてregion_code
withと呼ばれる列を含むテーブルがあります。Integer
私のPythonプログラムには、次の行があります。
region = session.query(Region).filter(Region.region_code/100 == region_prefix).one()
ここで重要な部分は、選択したフィルター方法です
Region.region_code/100 == region_prefix
ここで、region_code はテーブル内の整数列であり、region_prefix 変数は整数値を保持します
は、 (プログラムからの) region_prefix 変数が のような整数値を保持している間、 のregion_code
ような値を含むテーブルの整数列です。1199, 1200, 1300, 1499
11, 12, 13, 14
このフィルター オプションで実現したいことは、 で整数除算を実行してregion_code
(したがって、小数点以下をすべて切り捨てて) と比較できるようにすることregion_prefix
です。
例:
region_prefix = 11
Region テーブルに次のエントリが存在すると仮定します。
region_code = 1199
フィルター内の計算は次のようになります。
1199 / 100 = 11
したがって、この結果で をフィルタリングできますregion_prefix (11=11)
。
これは、MSSQL (Microsoft) で問題なく動作します。
残念ながら(私の場合)MySQL除算演算子/
は整数除算を行いません。したがって、の結果は次の1199/100
ようになる11.99
ため、クエリは DB で適切なエントリを見つけられません (11.99 != 11 のため)。それにもかかわらず、MySQL には実際に実装された内部除算があります: DIV演算子です。
したがって、次の SQL クエリは問題なく機能します。
SELECT * FROM Region where region_code DIV 100 = 11;
私の質問は次のとおり
です。SQLAlchemyfilter
メソッドを演算子DIV
の代わりに使用するにはどうすればよいですか? /
これは可能ですか?または、ネイティブ クエリを使用する唯一の回避策ですか?