升级到Django 1.8.3之后,我需要从使用django_extensions.db.fields.UUIDField更改为新的django.db.models.UUIDField
问题是旧的定义为带连字符的varchar(36),新的定义为不带连字符的char(32)
我清楚地看到没有这些连字符的好处。
我试了一下,我担心列中的数据会被截断。
当我检查字段的定义时,它将使用以下内容初始化:

def __init__(self, verbose_name=None, **kwargs):
    kwargs['max_length'] = 32
    super(UUIDField, self).__init__(verbose_name, **kwargs)

此定义阻止对最大长度的任何重写。
当然,我可以更新每个UUIDFields,我必须删除连字符,但这是一个相当长的过程,因为我的表很大。
有关信息,这是我必须运行的查询类型:
UPDATE myTable
SET uuid_field = REPLACE(uuid_field, '-', '');

所以我的问题是,你有什么比用UUIDFields对每个表的每一行运行一次大的更新更好的主意吗?

最佳答案

哦,更新数据库中的每个UUID字段太痛苦了,我正在重新实现类似于旧的django_extensions.db.fields.UUIDField
Django的第一个目标是Postgres,它有自己的UUID字段类型(不带连字符),但MySQL没有。
Django的新UUIDField在创建新字段时工作得很好,但如果您已经有了数据,那就很麻烦了。

10-07 21:54