6.5、Django-通过Models中JSONField来创建含JSON字段的MySQL表详解
在中介绍了通过在MySQL中创建JSON字段来驱动Django的Models,从⽽⽣成JSONField,然⽽,会出现⼀些问题,原因是Django中没有JSONField(),系统会默认JSON的字段整为TextField()形式,也许这样对结果不会造成什么影响,然⽽,⼼⾥也很别扭,有个疙瘩,总觉得不完美,有⼀个梗,总觉得是⼀个BUG!那么,这次,终极BOSS来啦。下⾯就开始说,如何通过Django的Models来创建含有JSON 的MySQL表。
1、准备⼯作
为此,Requirements and Installation:
Python: 3.6 (Python 3.4+ supported)
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;
3、新建项⽬和应⽤
django-admin.py startproject rubikJsonTest # 新建项⽬
cd rubikJsonTest # 进⼊该项⽬
django-admin.py startapp JsonTest # 新建⼀个应⽤(app)
4、添加应⽤
INSTALLED_APPS =[
'ib.admin',
'ib.auth',
'ttypes',
'ib.sessions',
'ssages',
'ib.staticfiles',
'django_mysql',# 注意:新加
'jsonTest',# 注意:新加
]
5、写models.py⽂件
from django.db import models
from dels import JSONField # 注意:JSONField在django_mysql中
# Create your models here.
# def my_default():
#    return {'foo': 'bar'}
class RubikJson(models.Model):
task_id = models.AutoField(primary_key=True)
namespace = models.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.DateTimeField()
class Meta:
managed =True
db_table ='rubik_json'
注意:
JSONField()中没有参数,当直接含有default参数时,可能会出错,此时,你需要在类外⾯创建⼀个函数通过Return传过来,具体见。
5、settings.py中添加数据库信息
DATABASES ={
'default':{
'ENGINE':'django.sql',
'NAME':'wanping',# 数据库
'USER':'⽤户名',
'PASSWORD':'密码',
python新建项目教程
'HOST':'服务器',
'PORT':'端⼝',
}
}
6、测试
通过下⾯是否成功:
python manage.py check
但是,出现了问题:
下⾯,就分别讲⼀下,如何解决上⾯的两个问题:
1、WARNINGS: ?: (django_mysql.W001) MySQL Strict Mode is not set for database connection 'default'
2、?: (django_mysql.W003) The character set is not utf8mb4 for database connection 'default'
7、最终解决
解决WARNINGS: ?: (django_mysql.W001) MySQL Strict Mode is not set for database connection 'default'问题。
解决?: (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. OK
#  Applying auth. OK
#  Applying admin. OK
#  Applying admin.0002_logentry_remove_ OK
#  Applying admin.0003_logentry_add_action_ OK
#  Applying contenttypes.0002_remove_content_ OK #  Applying auth.0002_alter_permission_name_ OK
#  Applying auth.0003_alter_user_email_ OK
#  Applying auth.0004_alter_user_ OK
#  Applying auth.0005_alter_user_last_ OK
#  Applying auth.0006_require_ OK
#  Applying auth.0007_alter_validators_add_ OK #  Applying auth.0008_alter_user_username_ OK
#  Applying auth.0009_alter_user_last_name_ OK
#  Applying jsonTest. OK
#  Applying sessions. OK
没问题。
去数据库看看有没有问题。
ok,完全没问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。