在MySQL中表示数组

时间:2014-01-23 15:41:33

标签: mysql django

我们正在做一个使用django框架和MySQL数据库的项目。我想通过使用

在模型中创建一个数组
  

CommaSeparatedIntegerField。

例如:

class MyModel(models.Model):
values = CommaSeparatedIntegerField(max_length = 200)

这将如何在MySQL中呈现?

3 个答案:

答案 0 :(得分:2)

MySQL中没有数组。如果将数组存储为逗号分隔的字符串,则在选择,修改数据和优化时会遇到问题。

所以,我建议你把项目存放在表格的行中。

答案 1 :(得分:1)

First normal form

最好避免这种情况: https://en.wikipedia.org/wiki/1NF

答案 2 :(得分:0)

我不得不做一些这样的事情,我所做的就是按照这里建议的方式使用。

http://justcramer.com/2008/08/08/custom-fields-in-django/

 from django.db import models
 class SeparatedValuesField(models.TextField):
       __metaclass__ = models.SubfieldBase

       def __init__(self, *args, **kwargs):
           self.token = kwargs.pop('token', ',')
           super(SeparatedValuesField, self).__init__(*args, **kwargs)

       def to_python(self, value):
           if not value: return
           if isinstance(value, list):
              return value
           return value.split(self.token)

      def get_db_prep_value(self, value):
            if not value: return
            assert(isinstance(value, list) or isinstance(value, tuple))
            return self.token.join([unicode(s) for s in value])

     def value_to_string(self, obj):
            value = self._get_val_from_obj(obj)
            return self.get_db_prep_value(value)