Mysql 运行显式创建表的迁移时未创建Django表。
在尝试对Django模型进行一些重大更改时,我把一切都搞砸了。幸运的是,我没有提交任何更改,所以我放弃了所有更改。下一步是让我的数据库恢复到以前的状态。最终,我成功地运行了Mysql 运行显式创建表的迁移时未创建Django表。,mysql,django,database,django-migrations,Mysql,Django,Database,Django Migrations,在尝试对Django模型进行一些重大更改时,我把一切都搞砸了。幸运的是,我没有提交任何更改,所以我放弃了所有更改。下一步是让我的数据库恢复到以前的状态。最终,我成功地运行了makemigrations和migrate命令。但是,每当我尝试访问该站点时,我都会收到编程错误,表示我的表topspots\u通知不存在 我的migrations文件夹中有以下迁移文件: # -*- coding: utf-8 -*- # Generated by Django 1.9.6 on 2016-08-25 15
makemigrations
和migrate
命令。但是,每当我尝试访问该站点时,我都会收到编程错误
,表示我的表topspots\u通知
不存在
我的migrations
文件夹中有以下迁移文件:
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-08-25 15:52
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('topspots', '0018_siteuser_share_location'),
]
operations = [
migrations.CreateModel(
name='Notification',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('message', models.TextField()),
('recipient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recipient_notification', to=settings.AUTH_USER_MODEL)),
('sender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='sender_notification', to=settings.AUTH_USER_MODEL)),
],
),
]
它应该创建那个表。如果我特别尝试运行此迁移,它将在尝试取消应用引用该表的后续迁移时失败,因为该表不存在。我已经尝试过删除上面的迁移(创建我的通知
表的地方),以及之后的每个模型。然后我再次运行makemigrations
和migrate
,但它说没有要应用的迁移,而且我的表还没有创建
我的问题是:为什么在运行迁移时没有创建表?我知道我可以在MySQL中手动创建表,但我想知道我是怎么做的,这样会弄乱数据库的
我看到过很多关于表没有被创建和迁移没有被应用的帖子,但是我还没有找到任何适合我的
- 我的表不是“非托管”表
- 我已尝试删除所有迁移并生成新迁移
- 我尝试过为整个项目运行
,也尝试过为特定的应用程序甚至特定的迁移运行迁移migrate
如有任何建议,将不胜感激。谢谢。当您成功运行迁移时,django会将该迁移的日志存储在
django_migrations
表中(您可以直接在数据库中进行检查),因此下次尝试运行同一迁移时,django会在日志中看到您已经运行了一次,并且不会再次尝试创建该表
您可以尝试通过修改该表来清除应用的迁移,然后再次运行迁移,或者[推荐]使用--false返回到安全点:
假设您在迁移0003和0002时遇到问题,但迁移0001没有问题。。。那么,回到迁移0001,我们该怎么办
./manage.py migrate my_app 0001 --fake
它将删除django_migrations
表上的0002和0003迁移,您可以重新创建它们或再次运行新迁移
请在测试之前备份数据库:p不想对任何数据丢失负责XD
希望这有帮助python manage.py showmigrations显示了什么?它是否将此迁移标记为已应用?@knbk如果[X]
表示已应用,则是,它将所有迁移显示为已应用。有一个表django_migrations,它保存所有已应用迁移的历史记录。您可以试试看。@user2976657谢谢您的建议!看到被接受的答案,原来它与那张桌子有关。很漂亮。是的,这就成功了。我之前看到,django_migrations
表中有迁移记录,我在恢复实验性更改时已经删除了这些记录,但不知道如何处理它们,然后就忘记了它们。感谢您对该表如何工作以及如何解决问题的简单解释!