Django 1.9-模型中的JSONField



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

from django.contrib.postgres.fields import JSONField

如何为MySql导入它?感谢

UPDATE:Django 3.1现在为多个数据库原生支持JSONField:https://docs.djangoproject.com/en/dev/releases/3.1/#jsonfield-对于所有支持的数据库后端


正如其他答案所述,Django的原生JSONField(从1.9和1.10开始)是为PostgreSQL提供的。

幸运的是,MySQL 5.7.8+自带本地JSON数据类型。您可以使用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_mysqlJSONField的更多信息。

Django JSONField仅是Postgres。

https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/#django.contrib.postgres.fields.JSONField

更新:

通过第三方库django-mysql 支持MYSQL

# 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

我知道这个问题是关于Django 1.9的,但随着Django 3.1的发布,JSONField现在可以与所有支持的数据库后端一起使用。

尝试将此模型的数据保存在本地机器上的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})

设置.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'
    }
    
}

Model Results(请参阅models.py)使用JSONField,它有大约200字节的数据但是在代码视图的res.save(…)行。py浏览器确实响应太长。

JSON有什么问题?除了缓存之外,服务器上还有什么问题?

今天我建议使用jsonfield2,或者等待Django 3中所有数据库后端的本地JSON支持。

现在在MySQL中,您可以使用默认的models.JSONFile,有关更多详细信息,请阅读此处https://docs.djangoproject.com/en/4.2/topics/db/queries/#querying-jsonfield

from django.db import models
class modelName(models.Model):
     name = models.CharField(max_length=200)
     data = models.JSONField(default=dict, null=True)
     def __str__(self):
          return self.name