2017-12-20 21 views
0

私は、Postgresテーブルにユーザーの電子メールアドレスとaltメールアドレスを含むテキスト配列列を持っています。大文字と小文字を区別しない配列クエリFlask-SQLAlchemy

私はFlaskとSQLAlchemyを使用していますが、ユーザーが入力した電子メールが配列に含まれている行のデータベースを照会します。現時点では私は私がいる問題は、既存の電子メールアドレスの一部は、大文字と小文字が混在しているが、私は作るための方法を見つけるように見えることができないということです.containsに

Users.query.filter(Users.emails.contains({email})).first() 

を使用しています配列の下位またはクエリの大文字小文字を区別しません。

私はfunc.lowerを見てきましたが、これはArraysとうまくやりたいとは思いません。もう一つのオプションは.ilikeですが、私はこれを動作させることができず、私のテーブルは約10,000行です。 ilike私は最も効率的だとは思わない?

これを行うにはどのような方法が最適ですか?

+0

ちょっとした解決策は、配列をテキストの 'lower()'にキャストしてチェックすることです。しかしそれほどパフォーマンスはあまり良くありません。よりクリーンなアプローチがもう少し複雑ですが、 'unnest()'と[配列のコンストラクタ](https://www.postgresql.org/docs/current/static/sql-expressions.html#SQL-SYNTAX)を見てください。 -ARRAY-CONSTRUCTORS)。 –

答えて

-2

私はトリックをした生のSQLを使用しました。

db.engine.execute("SELECT * FROM Users WHERE '%s' = ANY(lower(emails::text)::text[])" % email) 
+0

解決策は機能しますが、-1は文字列の値をクエリに書式化する場合に使用します。プレースホルダ/ bindparamsを使用してください:http://docs.sqlalchemy.org/en/latest/core/tutorial.html#using-textual-sql。 –

関連する問題