Mysql 如何在django数据库中存储具有不同属性的对象列表?

Mysql 如何在django数据库中存储具有不同属性的对象列表?,mysql,django,postgresql,django-models,Mysql,Django,Postgresql,Django Models,在mysql中存储数据很简单,比如 [ { 'name': 'Object1', 'color': 'red', 'shape': 'ellipse' }, { 'name': 'Object2', 'color': 'green', 'shape': 'circle' } ] 但若对象具有不同数量的属性,那个么当属性是平面属性时,它们就不是嵌套的了 [

在mysql中存储数据很简单,比如

[
    {
        'name': 'Object1', 
        'color': 'red', 
        'shape': 'ellipse'
    },
    {
        'name': 'Object2',
        'color': 'green',
        'shape': 'circle'
    }
]
但若对象具有不同数量的属性,那个么当属性是平面属性时,它们就不是嵌套的了

[
    {
        'name': 'Object1', 
        'color': 'red', 
        'shape': 'ellipse',
        'eccentricity': 0.5
    },
    {
        'name': 'Object2',
        'color': 'green',
        'shape': 'circle'
        'radius': 5
    }
]
有许多属性,所以子分类不是解决方案

在mysql中如何处理它?或者如果这不可能,可能是postgresql

关于非关系数据库,最好使用什么

我需要根据这些属性进行查询


提前感谢。

postgres中有一个可用于此类任务的选项。还有许多django应用程序添加了可以与mysql一起工作的JsonField,例如postgres中有一些可以用于此类任务的应用程序。还有许多django应用程序添加了JsonField,可以与mysql一起工作,例如,我不知道为什么要避免子类化,它的构建基本上就是为了这个目的。最好的方法是子类化。对于本例,您可能希望使用shape属性作为主要类。例如,可以创建一个Shape类:

class Shape(models.Model):
    color = models.CharField(max_length=20)
    class Meta:
        abstract = True

class Circle(Shape):
    radius = FloatField()

class Ellipse(Shape):
    eccentricity = FloatField()
这将在模型中创建两个表格,一个带有颜色和半径列的圆形表格,以及一个带有颜色和偏心列的椭圆表格

若出于某种原因确实希望避免子类化,并且正在使用PostgreSQL,那个么可以声明一个JSONField,该JSONField可能称为attributes或其他类似的不同值。不过,通过编程方式访问它们会更加困难。看起来是这样的:

class Shape(models.Model):
    color = models.CharField(max_length=20)
    attributes = models.JSONField()

我不知道为什么要避免子类化,它的构建基本上就是为了这个目的。最好的方法是子类化。对于本例,您可能希望使用shape属性作为主要类。例如,可以创建一个Shape类:

class Shape(models.Model):
    color = models.CharField(max_length=20)
    class Meta:
        abstract = True

class Circle(Shape):
    radius = FloatField()

class Ellipse(Shape):
    eccentricity = FloatField()
这将在模型中创建两个表格,一个带有颜色和半径列的圆形表格,以及一个带有颜色和偏心列的椭圆表格

若出于某种原因确实希望避免子类化,并且正在使用PostgreSQL,那个么可以声明一个JSONField,该JSONField可能称为attributes或其他类似的不同值。不过,通过编程方式访问它们会更加困难。看起来是这样的:

class Shape(models.Model):
    color = models.CharField(max_length=20)
    attributes = models.JSONField()