我尝试使用新的JSONField在Django 1.9中设置模型文件。我找到了使用postgres但没有使用MySql的例子。在postgres的例子中,他们做了一个
from django.contrib.postgres.fields import JSONField
如何为MySql导入它? 感谢
答案 0 :(得分:31)
正如其他答案中所述,Django的原生JSONField(截至1.9和1.10)适用于PostgreSQL。
幸运的是,MySQL 5.7.8+带有native JSON datatype。您可以使用 django-mysql 包和Django 1.8 +
将Django项目添加到其中 pip install django-mysql
from django.db import models
from django_mysql.models import JSONField
class MyModel(models.Model):
my_json_field = JSONField()
详细了解 django_mysql JSONField here。
答案 1 :(得分:12)
Django JSONField
仅限Postgres。
https://docs.djangoproject.com/en/1.9/ref/contrib/postgres/fields/#jsonfield
<强>更新强>
通过第三方库django-mysql
支持 MYSQL
答案 2 :(得分:3)
# Install jsonfield package
pip install jsonfield
# Define my model
from django.db import models
import jsonfield
class MyModel(models.Model):
the_json = jsonfield.JSONField()
答案 3 :(得分:1)
尝试将此模型的数据保存在本地计算机上的postgres db中:
models.py:
from django.db import models
from django import forms
from inputData.models import Input
from django.contrib.postgres.fields import JSONField
class Results(models.Model):
generator = models.OneToOneField(Input, on_delete = models.CASCADE, primary_key = True)
pvalues = JSONField()
views.py
def result(req, res_id):
try:
inp = Input.objects.get(pk = res_id)
path = os.path.join(BASE_DIR, 'uploads\\' + str(res_id) + '\\t.txt')
p_values = parse_res.main(path)
res = Results(generator = inp, pvalues = p_values)
res.save(using = 'results')
except Results.DoesNotExist:
raise Http404
return render(req, 'result.html', {'res': res})
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'results': {
'ENGINE':'django.db.backends.postgresql',
'NAME': 'results',
'PASSWORD': 'password',
'USER': 'user',
'HOST': '127.0.0.1',
'PORT': '8000'
}
}
模型结果(请参阅models.py)使用JSONField,它具有约200个字节的数据 但是在代码views.py的res.save(...)行上,浏览器的响应时间过长。
JSON有什么问题? 除了缓存,服务器上还会出现什么问题?
答案 4 :(得分:0)
对于今天,我建议对Django 3中的所有数据库后端使用jsonfield2或等待native JSON support。
答案 5 :(得分:0)
我知道这个问题与Django 1.9有关,但是JSONField现在可以与Django 3.1版本一起用于所有受支持的数据库后端。