我似乎无法在我的models.py
到python 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。
答案 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等文件。 对此可以有两种可能的解决方案。
在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中添加字段。您可以从此处删除正在创建问题的表。
第二种可能的解决方案是您可以删除所有迁移。然后运行命令以再次创建迁移。您应该在添加新表之前执行此操作。它将创建0001_initial.py文件。然后添加新模型并再次运行命令。并运行'python manage.py migrate'。
希望它能解决你的问题。