Django执行makemigration报错:表arenadatabase.providers_skill_name不存在
问题描述
我的Django项目中models.py代码如下:
class Car(models.Model): brand = models.CharField(max_length=50 , null=True , blank=True) model = models.CharField(max_length=50 , null=True , blank=True) code = models.CharField(max_length=20 , unique=True) class Label(models.Model): COLORS = ( ('blue' , 'blue'), ('red' , 'red'), ('light_green' , 'light_green'), ('black' , 'black'), ('white' , 'white'), ('orange' , 'orange'), ('purple' , 'purple'), ) name = models.CharField(max_length=20) color = models.CharField(max_length=30 , choices=COLORS) class Skill_Name(models.Model): label = models.ForeignKey(Label , on_delete=models.CASCADE , null=True , blank=True) name = models.CharField(max_length=50) have_different_cars = models.BooleanField(default=True) class Skill(models.Model): car = models.ForeignKey(Car , on_delete=models.CASCADE, null=True , blank=True) skill = models.ForeignKey(Skill_Name , on_delete=models.CASCADE , null=True , blank=True) class Provider(models.Model): user = models.OneToOneField(User , on_delete=models.CASCADE , related_name="user_provider") name = models.CharField(max_length=100) skills = models.ManyToManyField(Skill , blank=True)
执行makemigrations命令时,触发错误:
django.db.utils.ProgrammingError: (1146, "Table 'arenadatabase.providers_skill_name' doesn't exist")
尝试删除迁移文件后重新执行迁移,问题仍未解决。
解决步骤
1. 清理数据库残留异常表
- 登录数据库终端(以MySQL为例,执行
mysql -u 用户名 -p) - 切换到项目数据库:
use arenadatabase; - 查看所有表:
show tables; - 若发现
providers_skill_name或其他不属于当前模型的异常表,执行删除:drop table providers_skill_name;
2. 彻底重置迁移记录
- 删除项目所有
migrations目录下的__pycache__文件夹,以及除__init__.py之外的所有迁移文件 - 回到数据库终端,删除
django_migrations表中对应app的迁移记录:DELETE FROM django_migrations WHERE app = '你的应用名称';
3. 分阶段生成迁移(规避依赖冲突)
由于模型间存在外键关联,分批次创建迁移可避免顺序问题:
- 先注释掉
Skill_Name、Skill、Provider中的外键/多对多关联字段,仅保留基础字段,执行:python manage.py makemigrations python manage.py migrate - 恢复
Skill_Name中的外键字段,执行迁移:python manage.py makemigrations python manage.py migrate - 依次恢复
Skill、Provider的关联字段,每次恢复后执行makemigrations和migrate命令
4. 确认应用配置
检查settings.py的INSTALLED_APPS中是否包含模型所属的应用,若指定应用迁移,可执行:
python manage.py makemigrations 你的应用名称 python manage.py migrate 你的应用名称
内容的提问来源于stack exchange,提问作者Alireza javanpour
相关产品推荐
相关产品推荐

