Django无法添加新表

时间:2016-01-06 16:15:27

标签: django

我似乎无法在我的models.pypython manage.py syncdb添加更多表格,用于创建我的初始表格 MyTable 。我尝试了python manage.py makemigrations,然后python manage.py migrate --fake <appname>甚至python manage.py migrate

Syncdb为我提供了 django.db.utils.OperationalError:(1050,&#34;表&#39; myapp_mytable&#39;已经存在&#34;)和迁移命令don&#39; t给出任何错误,但表格没有被创建。

Models.py

class MyTable(models.Model):
    #table details
    #this table is already created.

class NewTable(models.Model):
    #table details
    #this is the table I want to add

注意:我使用的是Django 1.7。

2 个答案:

答案 0 :(得分:5)

从syncdb开始,然后切换到迁移,你已陷入不一致的境地。迁移生成器无法知道您在其功能之外创建了初始表,因此将继续尝试自己创建它。

要恢复,您可以执行此操作。删除迁移,然后注释掉第二个模型的代码。运行makemigrations然后migrate --fake,以使记录达到您实际所在的位置。现在,取消注释您的第二个模型,然后再次运行makemigrations;之后,migrate应该可以正常创建第二个表。

将来,请确保始终使用迁移。 (事实上​​,在最新版本的Django中这不是问题,因为已经删除了syncdb。)

答案 1 :(得分:1)

在您的app / migration文件夹中,您将拥有0001_initial.py和0002_auto_20151027_0524.py等文件。 0001_initial.py包含第一次运行'python manage.py makemigrations'时的更改。之后,无论何时运行此命令,都会创建0002_auto_20151027_0524.py等文件。 对此可以有两种可能的解决方案。

  1. 在0002_auto_20151027_0524.py这样的文件中,您将拥有这样的代码

    class Migration(migrations.Migration):
    
        dependencies = [
            ('testing', '0001_initial'),
        ]
    
        operations = [
                migrations.AddField(
                model_name='downloads',
                name='display_order',
                field=models.IntegerField(default=0),
            ),
            migrations.AlterField(
                model_name='draft_reports',
                name='accepted_date',
                field=models.DateTimeField(default=datetime.datetime(2015, 10, 27, 5, 24, 39, 588551), blank=True),
            ),
            migrations.AlterField(
                model_name='logentry_modified',
                name='action_time',
                field=models.DateTimeField(default=datetime.datetime(2015, 10, 27, 5, 24, 39, 548365)),
            ),
        ]
    

    如代码所示,它是在db中添加字段。您可以从此处删除正在创建问题的表。

  2. 第二种可能的解决方案是您可以删除所有迁移。然后运行命令以再次创建迁移。您应该在添加新表之前执行此操作。它将创建0001_initial.py文件。然后添加新模型并再次运行命令。并运行'python manage.py migrate'。

  3. 希望它能解决你的问题。