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でのシェアOKです。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。






Django

Posted by ちこ