gpt4 book ai didi

python - Django UUIDField 从 varchar(36) 截断到 char(32)

转载 作者:行者123 更新时间:2023-11-28 23:57:15 30 4
gpt4 key购买 nike

升级到 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)

此定义阻止对 max_length 的任何覆盖。

当然,我可以更新每个 UUIDField,我必须删除连字符,但这是一个相当长的过程,因为我的表非常大。有关信息,这是我必须运行的查询类型:

UPDATE myTable
SET uuid_field = REPLACE(uuid_field, '-', '');

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

最佳答案

好吧,更新数据库中的每个 UUID 字段太痛苦了,我正在重新实现类似于旧的 django_extensions.db.fields.UUIDField 的东西。

Django 的第一个目标是 Postgres,它有自己的 UUID 字段类型(没有连字符),但 MySQL 没有。

如果您正在创建一个新字段,Django 的新 UUIDField 可以很好地工作,但如果您已经有数据,它就会很痛苦。

关于python - Django UUIDField 从 varchar(36) 截断到 char(32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332282/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com