MariaDB | 作成したwebアプリのデータベースをSQLiteからMariaDBに変更する方法

Pythonには,DjangoというWebアプリケーションフレームワークがある.フレームワークのため,Djangoを利用するとWebアプリを通常よりも短時間で開発することが可能になる.

Reactとは,コンポーネンツをベースとしたユーザーインターフェイスを構築するためのフリーのフロントエンドJavaScriptライブラリーであり,Meta社によって開発された.

Reactは,Next.jsのようなフレームワークを利用してシングルページやモバイルもしくはサーバーレンダーアプリケーションの開発に利用することができる.

MariaDBは,MySQLの作者であるミカエル・ウィデニウスにより開発されたリレーショナルデータベースマネジメントシステム(RDBMS; Relational DataBase Management System)であり,オープンソースというだけではなく信頼性やパフォーマンスに優れている.

以下記事では「Todo webアプリの作成方法」を記した.

shelokuma tech blog | Todo webアプリの作成方法

こちらのwebアプリのデータベースには"SQLite"が利用されている.本記事では,データベースを"SQLite"から"MariaDB"に変更するやり方を以下に記す.

なお,SQLiteに保管したデータをMariaDBに移行するには非常に手間がかかるため,トライしておらず,当該内容は記事に含まれていない.

実施環境

Windows 11
Python 3.11.1
Django 5.1.1
Visual Studio Code (VS Code) 1.93.1
MariaDB 10.10.3

shelokuma tech blog | バージョン確認方法

Todo webアプリ向けMariaDBのデータベースの作成

MariaDBのダウンロードやインストール,設定等をしていない場合は,以下記事を参照する.

shelokuma tech blog | MariaDBの設定および基本的な利用方法

MySQL Clientを開く.

以下画面が開くので,設定したパスワードを入力する.

以下のように,"show databases;"と入力すると,データベースの一覧が出力される.

MariaDB [(none)]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.020 sec)

以下コマンドを実行し,データベースを作成する.私の場合,"tododb"という名前のデータベースにした.

MariaDB [(none)]> create database tododb;

Query OK, 1 row affected (0.014 sec)

以下コマンドを実行し,tododbに切り替える.

MariaDB [(none)]> \u tododb

Database changed
MariaDB [tododb]>

以下コマンドを実行し,ユーザー名とパスワードを設定する.今回設定したユーザー名とパスワードは以下にした.

  • ユーザー名: yyy
  • パスワード: zzz
MariaDB [tododb]> create user 'yyy' identified by 'zzz';

Query OK, 0 rows affected (0.017 sec)

以下コマンドを実行し,ユーザー名"yyy"にデータベース"tododb"のアクセス権限を与える.

MariaDB [tododb]> grant all on *.* to yyy;

Query OK, 0 rows affected (0.014 sec)

以下コマンドを実行し,以下のようなメッセージが返されれば問題ない.

MariaDB [tododb]> select * from mysql.user where user = 'yyy' \G


*************************** 1. row ***************************
                  Host: %
                  User: yyy
              Password: xxxxxxxxxxxxxxxxxxxxxxxx
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: N
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
   Delete_history_priv: Y
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string: xxxxxxxxxxxxxxxxxxxxxxxx
      password_expired: N
               is_role: N
          default_role:
    max_statement_time: 0.000000
1 row in set (0.006 sec)

以下コマンドを実行すると,作成したデータベース"tododb"を確認できる.

MariaDB [tododb]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tododb             |
+--------------------+
5 rows in set (0.001 sec)

データベースをSQLiteからMariaDBに変更

Djangoで開発した"backend"ディレクトリに移動し,以下コマンドを実行し,pipenvをactivateする.

$ pipenv shell

その後,以下コマンドを実行し,DjangoからMariaDBに接続するmysqlclientをインストールする.

$ pipenv install mysqlclient

“todoproject/settings.py"の"DATABASES"を以下のように編集する.

~
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': BASE_DIR / 'db.sqlite3',
        'ENGINE': 'django.db.backends.mysql', # 以下追記箇所
        'NAME': 'tododb', # 上記で作成したdb名
        'USER': 'yyy', # 上記で作成したuser名
        'PASSWORD': 'zzz', # 上記で作成したpassword名
        'HOST': 'localhost', 
    }
}
~

その後,以下コマンドを実行する.

$ python manage.py migrate

以下コマンドを実行する.

$ python manage.py runserver

ブラウザにて"http://127.0.0.1:8000/api/todos/"に移動すると,以下画面に遷移すれば成功となる.

以上