

djangoのモデルを利用して、以下のようなクエリーをかけたいのですが、  
モデルクラスで実現可能でしょうか？

[code]

    select
        *
    from
        table t
    where
        (t.col1, t.col2) in (
            ("hoge", "fuga"),
            ("foo", "bar")
        )
    
[/code]

<https://qiita.com/lithtle/items/4517785c67843f601443>より引用

私は、以下でもよいかと思ったのですが、

[code]

    query_set = app_model.SampleModel.objects.filter(col1__in=['hoge', 'foo'], col2__in=['fuga', 'bar'])
    
[/code]

(t.col1, t.col2)が("hoge", "bar")のレコードが存在した場合、正しくない結果が戻ることが分かりました。  
正しい方法を教えていただけないでしょうか。


CC BY-SA 4.0
2022-08-08T03:23:36.737
90427
2022-08-11T08:36:18.150
35267
question
python sql django sqlite
djangoのモデルで、複数の列の値の組を、複数指定して検索する方法


複合キーとなる列を、'_'で連結したものを、主キーとして持たせることで、  
疑似的に複数の列でin句を利用できるようにしました。  
（複合キーの文字列長が固定としました）  
データの挿入時などに、主キーを自力で設定する必要がありますが、  
回避策のひとつとして記録に残します。

[code]

    from django.db import models
    class TableModel(models.Model):
        id = models.CharField(primary_key=True, max_length=5)
        col1 = models.CharField(max_length=2)
        col2 = models.CharField(max_length=2)
        class Meta:
            db_table = 'table'
    
    model = TableModel(id='aa_xx', col1='aa', col2='xx')
    model.save()
    
    delete_list = [ 'aa_xx', 'bb_yy' ]
    TableModel.objects.filter(id__in=delete_list).delete()
    
[/code]


CC BY-SA 4.0
2022-08-11T08:36:18.150
90507
2022-08-11T08:36:18.150
35267
90427
answer