首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django 2.0中从SQLite迁移到Postgresql时UUID的一些问题

Django 2.0中从SQLite迁移到Postgresql时UUID的一些问题
EN

Stack Overflow用户
提问于 2018-08-27 14:22:45
回答 2查看 828关注 0票数 0

我正在尝试按照描述的步骤将Django 2.0.4项目从SQLite迁移到PostgreSQL 10,但是我遇到了不同的问题。在项目期间,我将一些Integer字段更改为UUID4字段。我成功地运行了python manage.py migrate --run-syncdb手动编辑auto_increment迁移文件,进行了这种类型的更改(请参阅id字段):

代码语言:javascript
复制
class Migration(migrations.Migration):

    dependencies = [
        ('dumps', '0011_auto_20180608_1714'),
    ]

    operations = [
        migrations.CreateModel(
            name='Report',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('data', models.DateTimeField(auto_now_add=True, verbose_name='Date')),
            ],
        ),
        ...
        ...
        ...

代码语言:javascript
复制
class Migration(migrations.Migration):

    dependencies = [
        ('dumps', '0011_auto_20180608_1714'),
    ]

    operations = [
        migrations.CreateModel(
            name='Report',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
                ('data', models.DateTimeField(auto_now_add=True, verbose_name='Date')),
            ],
        ),
        ...
        ...
        ...

接下来,我注释了uuid字段中存在AlterTable的所有AlterTable文件,但是当我运行python manage.py loaddata datadump.json时会获得以下错误:

代码语言:javascript
复制
django.db.utils.ProgrammingError: Problem installing fixture 'C:\Users\djangoproject\datadump.json': Could not load myApp.Reservation(pk=10d00b08-bf35-469f-b53f-ec28f8b6ecb3): ERROR:  column "reservation_id" is integer type but the expression is uuid type
LINE 1: UPDATE "myApp_reservation" SET "reservation_id" = '066cff3c-4b...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-28 12:59:23

我知道哪里出错了。问题是在postgre表方案:'id‘字段有’整数‘类型,而不是'uuid’。我将其转换为“uuid”,导入成功。

票数 0
EN

Stack Overflow用户

发布于 2018-08-27 14:38:27

我认为这里的问题是,在更改使用int之前,有一些旧迁移将AutoField() PK字段列作为UUIDField()引用。

您可能需要保留id字段,因为它是(可能将迁移回到生成swithc的点),并在Report模型中包含一个名为uuid的新字段(因此是uuid类型的列):

代码语言:javascript
复制
class Report(models.Model)

    id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, serialize=False, verbose_name='UUID')
    data = models.DateTimeField(auto_now_add=True, verbose_name='Date')
    ...

然后重新运行数据库迁移..。您可能会遇到更多的迁移错误,但是让我大喊一声,我可以在聊天中向您建议从哪里开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52041430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档