6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
で 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、全く問題ありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例