ホーム > db > mysql > 資産記録アプリ開発②~DB作成~

資産記録アプリ開発②~DB作成~

dbmysql作ってみた資産管理pythondjango

環境

Docker、docker-compose以前入れた物なのでバージョンは少し古めです。
OS:Windows 11 Home(21H2)
Docker:version 20.10.2, build 2291f61
docker-compose: version 1.27.4, build 40524192
Python: 3.8


MySQL環境構築

MySQLは最新版ではなく5.7を使用します。 ついでにGUIで色々出来るようにphpMyAdminもインストールしておきます。

この2つをdocker-composeを使って構築していきます。

まずはdocker-compose.yamlを作成します。

version: '3'
services:
mysqldb:
image: mysql:5.7
container_name: mysql57_container
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: money
TZ: 'Asia/Tokyo'
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- mysqldb
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS='mysqldb'
ports:
- "8000:80"
volumes:
- ./docker/phpmyadmin/sessions:/sessions

データ永続化などを考慮した作りにしておきます。
合わせて下記の様なフォルダを作成しておきます。

D:mysql
├─docker-compose.yml
└─docker
├─db
│ ├─my.cnf
│ │
│ ├─data
│ │
│ └─sql
└─phpmyadmin
└─sessions

準備が出来たら立ち上げます。

docker-compose up

http://localhost:8000」へアクセスし、下記の様な画面が表示されログインできれば、立ち上げ成功です。
20221010120100

20221010121200


テーブル作成

まずは以前の手順を参考にDjangoの環境を構築します。

conda create -n assetmanagement python=3.8
conda activate assetmanagement
conda install -c conda-forge django
django-admin startproject AssetManagement

参考:
Djangoを使ってみる①(環境構築~プロジェクト作成)
Djangoを使ってみる②(アプリケーションの作成)
Djangoを使ってみる④(Modelの作成~管理画面の使用)

下記の様なファイルが生成されます。
今回はわかりやすいように「settings.py」等が入っているフォルダを「config」という名前に変更しておきます。
「manage.py」「settings.py」の修正が必要なのでプロジェクト内を「AssetManagement」で検索して全て「config」に修正します。

20221010153500

続いて、アプリを作成します。ついでにMySQLを使用するためのライブラリもインストールしておきます。

python manage.py startapp asset_management
pip install mysqlclient

次にテーブルを作成するためにモデルの定義を行います。
今回は資産総額管理画面のためのモデルだけ作成します。
「asset_management\models.py」を下記のように編集します。

from django.db import models
class AppMaster(models.Model):
name = models.CharField(max_length=128, unique=True)
class Asset(models.Model):
created_at = models.DateField()
asset_amount = models.IntegerField()
diff = models.IntegerField()
diff_rate = models.FloatField()
managed_app = models.ForeignKey(AppMaster, on_delete=models.CASCADE, related_name='asett_app')
memo = models.CharField(max_length=256, null=True, blank=True)

Djangoはデフォルトではsqliteを使用する設定になっているため、settings.pyを下記のように修正し、MySQLに接続するようにします。
今回は環境変数から値を読み取る様記載しました。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['DBNAME'],
'USER': os.environ['DBUSER'],
'PASSWORD': os.environ['DBPASSWORD'],
'HOST': os.environ['DBHOST'],
'PORT': os.environ['DBPORT'],
}
}


環境変数設定例 :

変数名
DBNAMEmoney
DBUSERroot
DBPASSWORDroot
DBHOST127.0.0.1
DBPORT3306


その他、エラーが出ない様settings.pyやuils.pyを修正しておきましょう。
環境が整ったら、マイグレーションを行います。

python manage.py makemigrations
python manage.py migrate

マイグレーションが成功後、再度phpMyAdminへアクセスすると下記のようにテーブルが作成されています。
20221010163100
20221010163200