删除SQLite3数据库后执行Django迁移仍报core_item表不存在错误求助
我来帮你排查这个问题,这种情况我之前处理过,大概率是以下几个原因导致的,你可以逐一尝试:
可能的解决方案:
确认迁移文件是否正确生成
检查core/migrations/目录下是否存在对应Item模型的迁移文件(比如0001_initial.py)。如果没有,先确保core/models.py中确实定义了Item模型,然后运行python manage.py makemigrations core明确指定app生成迁移文件。重新执行迁移操作
运行python manage.py migrate时,留意控制台是否有core应用的迁移成功日志(比如Applying core.0001_initial... OK)。如果没有看到,先回退core应用的所有迁移:python manage.py migrate core zero然后重新应用迁移:
python manage.py migrate core验证数据库文件是否重新生成
删除旧的db.sqlite3后,执行migrate应该会自动生成新的数据库文件。去项目根目录查看是否有新的db.sqlite3,如果没有,检查settings.py中的DATABASES配置,确认NAME对应的路径是否正确,同时确保当前用户有创建文件的权限。检查视图是否提前触发数据库查询
从你的回溯信息来看,错误出在HomeView的get_context_data方法中。如果你的视图在模块导入阶段(而非请求处理时)就执行了数据库查询(比如在类定义里直接赋值queryset = Item.objects.all()并提前求值),会导致migrate还未创建表就触发查询。建议改用get_queryset方法返回查询集,确保查询逻辑只在请求处理时执行。清除缓存并重启服务
尝试清除Django缓存:python manage.py clearcache然后完全关闭开发服务器,再重新启动
python manage.py runserver。
原始问题及回溯信息:
我希望清理数据库并重新开始,因此删除了SQLite3数据库文件。删除后我执行了
python manage.py makemigrations和python manage.py migrate命令,但始终收到错误:OperationalError at / no such table: core_item。我不清楚原因,现将回溯信息附上:Traceback (most recent call last): File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\views\generic\base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\views\generic\base.py", line 97, in dispatch return handler(request, *args, **kwargs) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\views\generic\list.py", line 157, in get context = self.get_context_data() File "C:\Users\User\Desktop\Projectz 4.3\core\views.py", line 82, in get_context_data context = super(HomeView, self).get_context_data(**kwargs) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\views\generic\list.py", line 119, in get_context_data paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\views\generic\list.py", line 69, in paginate_queryset page = paginator.page(page_number) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\core\paginator.py", line 70, in page number = self.validate_number(number) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\core\paginator.py", line 48, in validate_number if number > self.num_pages: File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\utils\functional.py", line 80, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\core\paginator.py", line 97, in num_pages if self.count == 0 and not self.allow_empty_first_page: File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\utils\functional.py", line 80, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\core\paginator.py", line 91, in count return c() File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\models\query.py", line 392, in count return self.query.get_count(using=self.db) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\models\sql\query.py", line 504, in get_count number = obj.get_aggregation(using, ['__count'])['__count'] File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\models\sql\query.py", line 489, in get_aggregation result = compiler.execute_sql(SINGLE) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1097, in execute_sql cursor.execute(sql, params) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 176, in execute return self._record(self.cursor.execute, sql, params) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\debug_toolbar\panels\sql\tracking.py", line 117, in _record return method(sql, params) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\backends\utils.py", line 99, in execute return super().execute(sql, params) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\backends\utils.py", line 67, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers return executor(sql, params, many, context) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "C:\Users\User\Desktop\Projectz 4.3\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: no such table: core_item [08/Aug/2020 22:04:04] "GET / HTTP/1.1" 500 211611感谢您的帮助!
内容的提问来源于stack exchange,提问作者A_K

