フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

djangoからmongodbのアクセスはpymongoではなくdjongoがおすすめ

djangoからmongodbへ接続するためのライブラリについて

  • djangopythonにまだ慣れていない人(=自分)は、pythonからmongodbにアクセスするためのライブラリを利用しようと検討しましたが、このライブラリを使うとdjangoの恩恵を利用できない(=自分がしらないだけかも)とわかり試行錯誤しておりましたが、MySQLに変更しようと断念しようと思ったときに下記のライブラリにでいました。

なんとまぁ、Django専用のライブラリがありました。 nesdis.github.io

djongoの利用方法

  • インストール(Dockerfileの内容抜粋)
## Django
RUN pip3.8 install --upgrade pip
RUN pip3.8 install django
RUN pip3.8 install djongo
  • プロジェクト関連のフォルダにあるsettings.pyファイルに下記の記述する。NAMEで指定するのはDB名です。
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'hoge',
    }
}
  • pymongoではできなかったdjongoでmigrateコマンドの実行に成功できました。
# python3.8 manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
  • DBにもdjango関連のコレクションが作成できていることを確認しました。
$ mongo

> use hoge  ## DB指定

> show collections  << コレクション一覧
__schema__
auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session

前回の記事でDockerfileをdocker-composeファイルで指定する場合

  • 下記の記述で起動しますが、migrateをコマンドも追加しようか検討中です。
version: '3.1'
services:
  django-mongodb:
    build:
      context: ./
      dockerfile: ./containers/backend/Dockerfile
    container_name: winlogic-backend-api-db
    command: bash -c "mongod --fork --port 27017 --bind_ip 127.0.0.1 --logpath /data/db/mongod.log && python3.8 /srv/api/src/backend_api/manage.py runserver 0.0.0.0:8000"
    volumes:
      - ./backend/:/srv/api/src/backend_api/
    ports:
      - 8000:8000
      - 27017:27017

開発で利用しているPCはこちらです。