2017-08-21 4 views
0

私はsewiteテーブルでPeewee ORMを使用しています。複数の部分文字列が列になく、peewee ormがある

SELECT * FROM mytable WHERE name LIKE '% string1 %' or name LIKE '%string2 %' OR name LIKE '%string3 %' 

がどのように私はピーウィーでこれを行うことができます:私は、次のsqlliteの文がありますか?

注意http://docs.peewee-orm.com/en/latest/peewee/querying.html#query-operatorsを読みましたが、ここに適用する方法がわかりません。

答えて

1

あなたがお勧めします:

直接
MyModel.select().where(
    MyModel.name.contains('string1') | 
    MyModel.name.contains('string2') | 
    MyModel.name.contains('string3')) 

あるいは、ユースケースと小文字を区別しないLIKE:

MyModel.select().where(
    (MyModel.name ** '%string1%') | 
    (MyModel.name ** '%string2%') | 
    (MyModel.name ** '%string3%')) 

NOT IN行うには:

MyModel.select().where(MyModel.name.not_in(['string1', 'string2'])) 
+0

ありがとうございます。私が本当にここにいるのは、 "は含まれていない"ため、最初の例ではどこに '〜'を入れますか? – user61629

+0

'〜MyModel.name.contains( 'string1')'または代わりに '〜(MyModel.name ** '%string1%')' – coleifer

0

あなたは、これがうまくいくこと、などのクエリを変更することができます。

mytable.select().where(mytable.name == '%string1%' | mytable.name == '%string2%' | mytable.name == '%string1%') 

これはあなたのケースで動作するはずです。

+0

は近い私を取得すること、ありがとう。どのようにこれを "NOT IN"に変えるのですか? – user61629

+0

あなたは単純に!= symbolを使うことができません。 –

+0

これは非常に多くのレベルでは間違っています。 Pythonの演算子の優先順位はすべてを1つのブール値にマッシュするので、1つの括弧が必要です。さらに、 '%'ワイルドカードと完全に等しいことを意味することは意味がありません。あなたはLIKE演算子が必要です。 Peeweeでは、これをパワー演算子で行うことも、ワイルドカードをスキップして ".contains()"を使うこともできます。私の答えを見てください。 – coleifer

関連する問題