You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django删除数据库和迁移文件后执行makemigrations报no such table错误

问题原因

你的报错根源不是遗漏配置,是代码写法不符合Django的加载逻辑:
从报错栈可以直接定位到问题代码:..\projectname\appname\external\hiveserver_api.py第10行的语句:
USB_ETHERNET_ADAPTER_MAC_LIST = [A.mac for A in unmigrateablemodel.objects.all()]
你把ORM数据库查询语句写在了模块顶层,Django执行makemigrations/migrate这类管理命令时,会先加载全项目的模块(包括路由、视图、以及你引用的这个接口模块),此时迁移还没执行,数据库里对应表还没创建,查询直接触发报错。

你注释调用代码后迁移能正常执行,是因为导入流程不会触发这个查询,等迁移跑完表建好后,再取消注释查询自然能正常运行。


解决方案

不要把需要查询数据库的全局变量直接写在模块顶层,改成懒加载形式即可,两种常用改法:

  1. 包装为函数,需要取值的时候再调用
# 修改hiveserver_api.py对应代码
def get_usb_ethernet_mac_list():
    return [A.mac for A in unmigrateablemodel.objects.all()]
# 其他业务代码用到USB_ETHERNET_ADAPTER_MAC_LIST的位置,替换为调用get_usb_ethernet_mac_list()即可
  1. 用Django自带的懒加载缓存装饰器,第一次调用的时候才查库并缓存结果
from django.utils.functional import cached_property

class APISERVICE:
    @cached_property
    def USB_ETHERNET_ADAPTER_MAC_LIST(self):
        return [A.mac for A in unmigrateablemodel.objects.all()]
# 调用方式不变,直接用APISERVICE.USB_ETHERNET_ADAPTER_MAC_LIST即可

额外提示

你的重置脚本里第一条命令写错了,缺少manage.py,正确写法是python manage.py makemigrations app,否则执行会直接报错。

内容的提问来源于stack exchange,提问作者xtlc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:18:00