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」が起きたときの対処法についてご紹介いたしました。

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

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






Django

Posted by ちこ