NotSupportedError: DISTINCT ON fields is not supported by this database backend
今回はDjangoを使用しているときに「django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database backend」が起きたときの対処法についてご紹介いたします。
NotSupportedError: DISTINCT ON fields is not supported by this database backend
Django+MySQLで開発をしていたときのことです。
Querysetでdistinct('id’)など、distinctの関数を使用したら上記のエラーが表示されてしまいました。
結論を言うと、MySQLではdistinct('modelの属性’)の関数はサポートされていないようです。
PostgresSQLでのみ、上記のdistinct('modelの属性’)の関数を使えるようですね。
では、MySQL上でどうすればdistinctを使えるかというと、values_listを使用しましょう。
例えば、下記のプログラムを書きたかったとします。
1 |
testModel.objects.all().distinct('testPrice') |
この場合、MySQL上ではvalues_listを組み合わせて次のプログラムを書きましょう。
1 |
testModel.objects.all().values_list('testPrice', flat=True).order_by('testPrice').distinct() |
注意点としては、order_byをつけることです。
これをつけなければデータが飛び飛びであったときにきちんとdistinctで重複するデータが除かれなくなってしまいます。
この記事が参考になれば幸いです。
終わりに
今回はDjangoを使用しているときに「django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database backend」が起きたときの対処法についてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません