1. ホーム
  2. Django

6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する

2022-03-02 02:16:01
<パス

6.4

1. 準備

これについては、「要件とインストール」。

  • Python 3.6 (Python3.4+をサポート)
  • Django 1.11, 2.0, 2.1
  • MySQL 5.6、5.7 / MariaDB: 10.0、10.1、10.2、10.3
  • mysqlclient: 1.3

2. MySQLでライブラリを作成する

CREATE DATABASE wanping;

django-admin.py startproject rubikJsonTest # Create a new project
cd rubikJsonTest # Enter the project
django-admin.py startapp JsonTest # Create a new application (app)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_mysql', # Note: new additions
    'jsonTest', # Note: Newly added
]

from django.db import models
from django_mysql.models import JSONField # Note: JSONField is in django_mysql
# Create your models here.

# def my_default():
# return {'foo': 'bar'}

class RubikJson(models.Model):
    task_id = models.AutoField(primary_key=True)
    CharField(max_length=80, blank=True, null=True)
    username = models.CharField(max_length=80, blank=True, null=True)
    task_desc = models.CharField(max_length=200, blank=True, null=True)
    type = models.CharField(max_length=20, blank=True, null=True)
    his_data = JSONField() # default=my_default
    create_time = models.

    class Meta:
        managed = True
        db_table = 'rubik_json'


3. 新規プロジェクトとアプリケーション

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'wanping', # database
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'Server',
        'PORT': 'port',
    }
}


4. アプリケーションを追加する

python manage.py check


5. models.py ファイルを書く

WARNINGS: ? : (django_mysql.W001) MySQL Strict Mode is not set for database connection 'default'


注意事項
JSONField() は引数を持たないので、デフォルトの引数を直接含むとエラーになることがあります。その場合は、クラスの外で関数を作成して Return を渡す必要があります。 JSONField .

5. settings.pyでデータベース情報を追加する

? : (django_mysql.W003) The character set is not utf8mb4 for database connection 'default'

6.テスト

以下が成功したかどうかを渡します。

WARNINGS: ? : (django_mysql.W001) MySQL Strict Mode is not set for database connection 'default'

ただし、問題があるのは

上の2つの問題のそれぞれの解き方を説明します。
1.

? : (django_mysql.W003) The character set is not utf8mb4 for database connection 'default'
2.
python manage.py check
# output:
# System check identified no issues (0 silenced).

7. 最終解答

解答 python manage.py makemigrations ## output: #Migrations for 'jsonTest': # jsonTest\migrations\0001_initial.py # - Create model RubikJson python manage.py migrate ## output: #Operations to perform: # Apply all migrations: admin, auth, contenttypes, jsonTest, sessions #Running migrations: # Applying contenttypes.0001_initial... OK # Applying auth.0001_initial... OK # Applying admin.0001_initial... OK 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 jsonTest.0001_initial... OK # Applying sessions.0001_initial... OK 問題です。

リゾルブ ? : (django_mysql.W003) The character set is not utf8mb4 for database connection 'default' 問題です。

具体的に見る チェック項目 .

8. 実行

python manage.py check
# output:
# System check identified no issues (0 silenced).


問題ありません。

python manage.py makemigrations
## output:
#Migrations for 'jsonTest':
# jsonTest\migrations\0001_initial.py
# - Create model RubikJson

python manage.py migrate
## output:
#Operations to perform:
# Apply all migrations: admin, auth, contenttypes, jsonTest, sessions
#Running migrations:
# Applying contenttypes.0001_initial... OK
# Applying auth.0001_initial... OK
# Applying admin.0001_initial... OK 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 jsonTest.0001_initial... OK
# Applying sessions.0001_initial... OK



問題ありません。
データベースにアクセスし、問題がないか確認します。

OK、全く問題ありません。