当前位置: 首页 > 知识库问答 >
问题:

Django继续使用migrations命令为旧数据库重新创建外键字段

羊舌兴文
2023-03-14

我对Django开发还是个新手。我正在使用一个用MySQL创建的遗留数据库。现在我面临着Django迁移的问题。我很少有表使用外键来引用另一个表。现在,如果我允许Django管理那些带有外键的表,那么Django将尝试在make-migrations和migrate命令期间重新创建外键字段。即使田地已经在那里。此外,如果我不允许Django管理这些表,Django可以完美地处理数据库。

我的代码是针对表面对错误的

from django.db import models
from django.utils.translation import gettext_lazy as _
from django.db.models.signals import pre_save
from chooseright.utils import unique_slug_generator

class StoreTable(models.Model):
    store_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=45, blank=True, null=True)
    slug = models.SlugField(max_length=45, blank=True, null=True)
    catagory = models.ForeignKey(CatagoryTable, on_delete=models.CASCADE, blank=True, null=True)
    brand = models.ForeignKey(BrandTable, models.DO_NOTHING, blank=True, null=True)
    
    class Meta:
        managed = True
        db_table = 'store_table'
        verbose_name = _("Store")
        verbose_name_plural = _("Stores")

    def __str__(self):
        return self.name
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        ('core', '0009_auto_20200820_1258'),
    ]

    operations = [
        migrations.RenameField(
            model_name='storetable',
            old_name='store_name',
            new_name='name',
        ),
        migrations.AddField(
            model_name='storetable',
            name='brand',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='core.BrandTable'),
        ),
        migrations.AddField(
            model_name='storetable',
            name='catagory',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.CatagoryTable'),
        ),
    ]
  File "C:\Users\Usama\dev\Django Projects\lib\site-packages\MySQLdb\connections.py", line 259, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1060, "Duplicate column name 'brand_id'")

现在我知道Django正在尝试重新创建外键字段。但既然是遗留数据库,我就不能理解为什么会发生这种情况。

共有1个答案

薄龙光
2023-03-14

根据这里的文档,您需要告诉django不要管理您的模型。如果您不想让django用它的迁移创建或修改任何东西,请设置模型的managed=false

 类似资料:
  • 我安装了Oracle 19c数据库软件。我试图用脚本创建一个数据库;我创建了一个监听器和pfile(参数)文件。然后键入这个命令, -- 在此之后; -- 当我输入这些命令时,屏幕上只有“2”。然后,任何事情都不会发生。

  • 我有一个问题与我的Laravel迁移:( 当我运行php artisan migrate时,它会在外键上停止。 首次迁移 还有第二个 运行命令后,我出现以下错误: [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表gsb_larave.35; sql-176_b9(错误号:150“外键约束格式不正确”)(sql:alter

  • 问题内容: 作为MySQL的新手,我已经安装了最新版本的MySQL Workbench(5.2.33)。我想知道如何使用此应用程序创建数据库。在SQL编辑器的“概述”选项卡中,几乎没有显示“ MySQL模式”,这些模式是现有数据库吗? 问题答案: 启动MySQL Workbench。 在欢迎窗口的左窗格中,在“打开连接以开始查询”下选择要连接的数据库。 查询窗口将打开。在其左窗格上,有一个标题为“

  • 如何让Spring Boot在测试类之间从头开始重新创建内存中的测试数据库? 我有几个用和注释的本地集成测试,可以改变数据库状态。我已经用标记了每一个。我期望创建内存数据库的代码将是应用上下文生命周期的一部分,因此在任何后续测试中都应该创建一个新的生命周期。 我可以在日志中看到Flyway正在尝试重新应用迁移,并认为它们已经完成,因为数据库尚未清除。 Spring Boot是否在每个应用上下文之外

  • 本文向大家介绍用命令创建MySQL数据库(de1)的方法,包括了用命令创建MySQL数据库(de1)的方法的使用技巧和注意事项,需要的朋友参考一下 一、连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1、 连接到本机上的MYSQL。 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户 名前可以有空

  • 问题内容: 我已经在Django中创建了一个不错的数据库,并且希望通过网站内容之外的一些python脚本进行交互,因此我很好奇是否可以在Django之外使用Django数据库API网站,如果有的话,有没有人知道如何实现此目的?Google并没有为此带来很多成功。 问题答案: 在进行任何调用(包括导入模型)之前,你只需要配置Django设置即可。像这样: 同样,请确保在运行之前运行该代码,例如: 然

  • 问题内容: 我们有2个数据库-DB1和DB2。 我可以在DB1中创建一个与DB2中的一个表有关系的表吗?换句话说,我的表中是否可以有来自另一个数据库的外键? 我用不同的用户连接到这些数据库。有任何想法吗? 现在,我收到错误消息: ORA-00942:表或视图不存在 问题答案: 不可以,Oracle不允许您创建通过数据库链接引用表的外键约束。您将必须使用触发器来强制执行完整性。

  • 我在Linux虚拟机上安装了Oracle Database 11g Express Edition 11.2.0.2.0-64位产品。linux机器没有桌面环境,因此无法使用SQL Developer软件。据Oracle称,SQLcl是Oracle数据库的命令行界面,它结合了SQL*Plus和SQL Developer的强大功能。我现在已经安装了SQLcl(SQL开发人员命令行),并且能够在lin