1
私はPostgreSQLのテーブルに、タグの配列(タグの列の配列データ型)を持つカラムを持っています。 Peewee(PythonのORM)を使用して、タグのいずれかがリスト内の任意の文字列の部分/部分文字列と一致するすべての行を選択したいと思います。LIKE Peeweeを使用した配列のSQLクエリー
ので、例えば、私はこのようになりますリストかもしれない:
["stan", "tina"]
をし、それがタグafghanistan
、pakistan
、stanford
またはargentina
のいずれかを持っているテーブル内のすべての行と一致する必要があります。
SQLクエリは、次のようなものになります:
SELECT * FROM media WHERE tags::text LIKE ANY (ARRAY[‘%stan%‘, ‘%tina%‘]);
私はこの使用してピーウィーを行うだろうか?
tags
列は次のようにモデル化されている:あなたのモデルを仮定し
tags = ArrayField(TextField)
こんにちはいる間はPython 3
reduce
機能がfunctools
moduleで入手可能ですに!私は全体のタグがマッチしたときにあなたのサンプルワークを得るだけです。私は、 'tags'モデルが' ArrayField(TextField) 'であるため、' contains() 'は配列が部分文字列ではなくタグと完全に一致するかどうかをチェックするだけなので、 (私はその事件を明らかにするために質問を編集しました:列の型は 'ArrayField(TextField)'です) –@AlfredGodoy:編集、それが役に立ったら –
nah、まだ完全なタグと一致しています。 Peeweeによって生成されたSQLを見ると 'contains_any()'は 'WHERE t1。 'というタグになります。' &&%s'は '&& 'を意味します。私の場合、 'tags'リストには完全なタグではなく部分文字列/部分が含まれています。だから、タグ "イスタンブール"は、タグリストに "スタン"を持っていることで一致しません。 –