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を使用しましょう。
例えば、下記のプログラムを書きたかったとします。

この場合、MySQL上ではvalues_listを組み合わせて次のプログラムを書きましょう。

注意点としては、order_byをつけることです。
これをつけなければデータが飛び飛びであったときにきちんとdistinctで重複するデータが除かれなくなってしまいます。

この記事が参考になれば幸いです。

終わりに

今回はDjangoを使用しているときに「django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database backend」が起きたときの対処法についてご紹介いたしました。

【お知らせ】
プログラミングのコンサルタントをすることを考えております。
下記の通り、かなり格安でご用意させていただいております。
【格安】プログラミングコンサル生募集(初心者向け、フリーランス志望向け)

詳しくは下記のリンクをご覧ください。
https://chico-shikaku.com/2020/10/programming-consult-2020/

11月くらいを目処に開始予定です。
最初は募集があれば先着5名くらいを目安に考えております。
質問や意見、問い合わせやお申し込みは下記のリンクよりお願いいたします。
https://docs.google.com/forms/d/e/1FAIpQLSeTXskmlyPAHuhwiOE9togqJPWdhXYCyRoVnFkkbS0VN0Ftug/viewform?usp=sf_link

最後までお読みいただきありがとうございます。
ブログやTwitterでのシェアOKです。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。






Django

Posted by ちこ