Django 1.9 - 模型中的JSONField

时间:2016-05-03 14:35:25

标签: django

我尝试使用新的JSONField在Django 1.9中设置模型文件。我找到了使用postgres但没有使用MySql的例子。在postgres的例子中,他们做了一个

from django.contrib.postgres.fields import JSONField

如何为MySql导入它? 感谢

6 个答案:

答案 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()

更多细节:https://pypi.python.org/pypi/django-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版本一起用于所有受支持的数据库后端。