sql >> データベース >  >> RDS >> Mysql

SQLAlchemyの大文字と小文字を区別しないINベースの検索クエリ?

    これは正確にコンパイルする必要があります...

    query( models.Object )\
    .filter( 
         sqlalchemy.func.upper( models.Object.fieldname )\
         .in_( (sqlalchemy.func.upper(foo) , sqlalchemy.func.upper(bar), ) )
    )\
    .all()
    
    1. 大文字のテキストを渡すこともできます。個人的には、in_( foo.uppercase() , bar.uppercase() )を実行します

    2. SqlAlchemyはDBAPIと連携して、バインドパラメーターをバックエンドデータストアに渡します。翻訳-値は自動的にエスケープされます。

    文字列のリストを作成したい場合は、このようなものが機能するはずです

    .in_( [ i.upper() for i in inputs ] )
    .in_( [ sqlalchemy.func.upper(i) for i in inputs ] )
    

    これらの選択を速度のために最適化したい場合で、PostgresまたはOracleを使用している場合は、「関数インデックス」を作成できます

    CREATE INDEX table_fieldname_lower_idx ON table(lower(fieldname))
    

    (データベース内の)クエリプランナーは、そのlower(fieldname)を使用することを認識します。 lower(fieldname)に対して検索するときのインデックス クエリ。




    1. MySQLを使用したスパマーの検出

    2. PostgreSQLのテーブルを参照する保存された関数を一覧表示します

    3. SQL:2つのフィールドに基づいて重複を見つける方法は?

    4. `having`で`rand()`を使用する