在使用django进行后端开发,在setting.py 中配置目标数据库信息后,并且在项目app下的model.py文件中定义了模型。之后使用 "python manage.py makemigrations"创建数据表时报错如下所示:
django.db.utils.ProgrammingError: (1146, "Table 'madjango1.index_type' doesn't exist")
看到错误意思就是:未能找到madjango1.index_type表。而我们的数据库是刚创建的,怎么可能有没表呢?一脸尼克扬问号。
上网搜索许多说的都是删除app/migrations/下的其他文件,只留__init.py。这些步骤都是必须的,但是却未能解决我们的问题。那么根本原因何在?为什么会出现这样的报错?继续往上看报错信息:
File "", line 219, in _call_with_frames_removed
File "E:\Users\Administrator\PycharmProjects\MyDjango\MyDjango\urls.py", line 23, in
path('', include('index.urls')),
File "E:\Users\Administrator\Anaconda3\envs\test3.6\lib\site-packages\django\urls\conf.py", line 34, in include
urlconf_module = import_module(urlconf_module)
File "E:\Users\Administrator\Anaconda3\envs\test3.6\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
看到第二行有我们熟悉的文件路径 "File “E:\Users\Administrator\PycharmProjects\MyDjango\MyDjango\urls.py”, line 23, in " 大概明白了吧!确实也正如 “path(’’, include(‘index.urls’)),” 所示。当我们在构建数据库列表时,程序已经开始执行了。在url.py 文件下未能找到所需表格,于是便会出现报错(如果你是第一次执行,这个文件下没有其他的url,应该按网上所说的,删除/app/migrations/文件下的其他路径即可)。
既然是url.py 入口处未能找到所需表格,那么尝试把它注释掉试试:
urlpatterns = [
path('admin/', admin.site.urls),
# path('', include('index.urls')),
# path('front/', TemplateView.as_view(template_name='index.html'))
]
(test3.6) E:\Users\Administrator\PycharmProjects\MyDjango>python manage.py makemigrations
Migrations for 'index':
index\migrations\0001_initial.py
- Create model Product
- Create model Type
- Add field type to product
(test3.6) E:\Users\Administrator\PycharmProjects\MyDjango>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, index, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
此时再去查看数据库:
mysql> use madjango1;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_madjango1 |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| index_product |
| index_type |
+----------------------------+
12 rows in set (0.00 sec)
此外,新建一个数据库后如何把之前数据中的数据迁移过来,免得手动输入。我在网上搜了下,是这样说的:
(test3.6) E:\Users\Administrator\PycharmProjects\MyDjango>python manage.py dumpdata > data.json
(test3.6) E:\Users\Administrator\PycharmProjects\MyDjango>python manage.py loaddata data.json
Installed 40 object(s) from 1 fixture(s)
执行如上所示命令后,再去查表,仍未迁移过来,这个以后找到好用的方法了再补充吧!
从一名不羁的码农开始,欢迎关注我的微信公众号