我正在尝试使用新的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的更多信息。
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