2024-01-01から1年間の記事一覧

Djangoでpytestを使う方法

DjangoでUTを書く時にはPythonのunittestのサブクラスにしたdjango.test.TestCaseを用いることが出来る。 その一方で、他のUTを書くことも含めて考えると、pytestを利用したいケースも多く存在すると思われる。 Djangoでpytestを利用するにはpytest-djangoと…

django_migrationsテーブルについて

django_migrationsはマイグレーション履歴を保持するテーブル。 しかし、意外とドキュメントに説明はない。 主にチュートリアル part 2 に以下の説明がある通りである。 Django tracks which ones are applied using a special table in your database calle…

psqlコマンドが使えなかったがPATHを追加する必要があったという話

PostgreSQLをターミナル上で動かす際にpsqlというものがあります。 このpsqlが使えなかったケースがあり、結論としてはPATHが通っていなかったという状態でした。 Mac Ventura 13.6とHomebrewは4.2.17 の環境で確認しました。 また、以下の参考記事と内容は…

マイグレーションの実行前後ではshowmigrationsを実行しよう

Djangoのマイグレーションの実行状態を確認する方法として、showmigrationsがあります。 https://docs.djangoproject.com/ja/5.0/ref/django-admin/#showmigrations コマンドは以下のように実行します。 python manage.py showmigrations 以下のように実行さ…

マイグレーションで出力されるSQLを確認する方法

DjangoでDBに関連した操作をするとき、django-adminのmakemigrationsでマイグレーションファイルを作成して、migrateでマイグレーションを実行します。 そのマイグレーション実行時に実行されるSQLを確認するには、sqlmigrateを利用します。 Django4.2で検証…

django-admin startproject ではディレクトリを指定できる

きっかけはDocker, docker-composeを利用してコードを書いてみようと思ったときに、公式サンプルのコードを見ての疑問でした。 sudo docker compose run web django-admin startproject composeexample . https://github.com/docker/awesome-compose/tree/ma…

Djangoのログ出力について

先週投稿したOneToOneFieldの裏側で発行されているSQLを確認する の中でSQLをログ出力できるようにしていました。 そこについて、コピペで動いた!状態だったので、脱却するために調べました。 結論 DjangoではPythonのloggingを利用しています。 logging.co…

OneToOneFieldの裏側で発行されているSQLを確認する

この記事は(第157回)Python mini Hack-a-thon(ハイブリッド) の記事です。 先週、こちらの記事を投稿したところ、先輩からアドバイスをもらいました。 どんなSQLが実行されているか出力しながら検証すると理解が深まるかなと思いました。— かしゅー (@kashew…

OneToOneFieldを使うと関連モデルから属性へアクセス出来るようになる

www.youtube.com Multiple User Types With Custom Data Fields | Djangoという動画中に出てくるコードを見て、自分にとっては謎の挙動だったので調べました。 具体的には以下のようなコードが動画中で書かれていました。 class DriverMore(User): user = mo…

set型について

個人的にはPythonでなにかとlistを利用することが多かったのですが、set型について知って、改めて適切な型を利用するのが大切だなと感じました。 set型は以下のような特徴を持ちます。 順序がない 挿入順序、要素位置は保持しない 重複を削除できる 和集合や…

on_deleteはデータベース制約を作成しない

DjangoのModel定義のon_deleteについて改めて分かったことを簡単にまとめます。 以下のような要点を改めて知る機会がありました。 マイグレーション実行の有無は関係ない Modelに記述したかどうかで処理が決まる データベースにはon_deleteの内容は反映され…

DjangoのQuerySetのdelete()について理解する

QuerySetのdelete()の挙動について教えてもらった & 自分でも改めて手を動かして理解してみました。 結論 delete()は単純に指定したModelが削除されるだけではなく返り値も存在します(=ここがまずちゃんと分かっていなかった所でした)。 具体的にはタプル…

DjangoでQuerySetを試しに組み立てる際にはdjango-extensionsのshell_plusを利用しよう

Djangoを利用するとき、QuerySetを利用してSQLを組み立てるケースが多いと思います。 しかし、QuerySetの経験に乏しいと、SQLがイメージできていても、どういうQuerySetを書けば良いか、というのがまだ判断できないケースも存在すると思います。 動作確認実…

DjangoでDB接続する時はdbshellを使おう

DjangoにはDB接続周りの処理をラッピングしてくれるdbshellというコマンドがあります。 https://docs.djangoproject.com/en/5.0/ref/django-admin/#dbshell 使い方 python manage.py dbshell とするとDBへ接続して対話シェルを開いた状態へ。 python manage.…

QuerySet.queryで手軽にSQLを確認する

DjangoでSQLを確認する方法として一番手軽だなと思ったのが.queryを利用したSQL出力でした。 以下のようにQuerySetに対して.queryと記述することで実行される予定のSQLを確認することが出来ます。 python manage.py shell >>> from snippets.models import S…

venvで環境構築する

普段何気なく利用している、venvを利用した環境構築について簡単にまとめてみました。 venvを利用するメリット そもそも最初期は「なんで直接PCにインストールしたらいけないの?面倒くさくない?」と思っていたので、まずはそのメリットを説明します。 他の…

pip install httpieが失敗した時の備忘録

DRFのTutorialを実行していく中で起こった内容の記録と暫定対処法 結論 これを読む人は、これが記事執筆時点の正攻法ではないことを認識ください MULTIDICT_NO_EXTENSIONS=1 pip install multidict pip install httpie を実行することで、インストール可能に…

DRFを触ってみた

はじめに Django REST framework(略称 DRF)を触ってみました。 https://www.django-rest-framework.org DRFはDjangoでREST APIを作成する時に利用する有名なライブラリです。 今までちゃんと触ったことがなかったので、改めて学習してみました。 まずはQui…

Docker(docker-compose)のhealthcheckを試してみた

背景 自作のDocker, docker-composeを利用したアプリケーションで、docker-compose内でdepends_onを利用 + アプリケーション側でチェックする仕組みを作っていましたが、これだけでは不足してたことと、healthcheckというものがあると聞いたので試してみまし…