#####(1)
Django项目迁移数据库报错: ‘decode‘
报错翻译:AttributeErrer: 'str'对象没有'decode'属性
解决:报错点进去 将decode修改为encode
保存时选第一个 I want to edit this file anyway (无论如何都要编辑这个文件)
#####(2)
执行迁移python manage.py makemigrations
报错 No changes detected
执行迁移python manage.py makemigrations --goods #goods为需要迁移的子应用名字
报错 manage.py: error: unrecognized arguments:
报错翻译:Manage.py:错误:无法识别的参数:
原因:可能子应用下 migrations目录下的 __init__.py文件被误删,
解决:在goods子应用下migrations的文件下 手动添加上__init__.py文件 就行了
#####(3)
报错:D:\Course\P5s\p5_ZUOYE\pro_728>python manage.py makemigrations
C:\Users\86155\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\commands\makemigrations.py:109: RuntimeWarning: Got an error checking a consistent migration history performed
for database connection 'default': (1049, "Unknown database 'pro_728'")
RuntimeWarning,
Migrations for 'goods':
goods\migrations\0001_initial.py
- Create model Goods
报错翻译:对于数据库连接“default”:(1049,“未知数据库‘pro_728’)
原因:在没有pro_728这个库的情况下写好模型类直接进行迁移,
没有创建pro_728库的情况下直接迁移python manage.py makemigrations 可能会出现目前所遇到的以下两种情况:
1> 通常情况下只会在goods子应用的migrations目录下生成0001_initial.py,此时只需要删除生成的0001_initial.py迁移文件,
然后在mysql中创建pro_728库,再次进行python manage.py makemigrations makemigrations 就ok了,
接着执行迁移python manage.py migrate 都没有问题。
2> 也有可能会出现
这是说明django可能是根据源代码内置的功能帮你生成了一个空文件,
解决:在mysql->data文件下,找到‘pro_728’,删除此文件, 此时再去mysql数据库创建这个库就可以创建了。
接着就是迁移,执行迁移的步骤了。
#####(3-2)
报错:mysql> drop database pro_728;
ERROR 3679 (HY000): Schema directory '.\pro_728\' does not exist
报错翻译:错误3679 (HY000):架构目录'。\pro_728\'不存在
原因:当数据库中的库无法删除时 提示这个错误 是因为mysql-data 文件下没有这个库
解决:此时需要进入mysql->data文件下 手动添加这个名为pro_728的文件
再次进入mysql数据库进行drop database pro_728; 操作删除
#####(3)总结:在mysql数据库进行操作时 mysql-data文件中必须有这个库名的文件夹,如果没有,即使是在mysql数据库中删除这个库,也是无法执行命令的。
#####(4)
报错:django.db.utils.OperationalError: (1170, "BLOB/TEXT column 'contents' used in key specification without a key length")
报错翻译:django.db.utils。操作错误:(1170,“在没有键长度的键规范中使用的BLOB/TEXT列‘contents’”)
原因:可能是 models模型类的字段的类型(定义不规范)
也有可能是 migrations 中已经生成过一次 0001_initial.py
######(5)
每次迁移会生成迁移记录 ,在数据库中执行sql语句 删除的字段等迁移记录中仍存在,需手动删除该条信息,不然会影响到第二次迁移,(每次迁移都会基于前几次的迁移)
######(6)
给表增加外键字段 迁移时 该表中已有旧数据 需要给这些数据添加一个新字段的默认值
######(7)django.db.utils.OperationalError: (1050, "Table 'exam' already exists")
python manage.py migrate 子应用名 --fake
注:第一次项目模型类是由sql文件导入生成表,第二次新建表,此时在model中注释新建的模型类(因为考虑到数据库中已经存在之前的表),1. makemigrations先生成第一个迁移记录,也就是之前的迁移记录。2.放开model注释,生成第二次迁移记录,然后migrate迁移,此时可能会报错说新建的表已经存在,输入python manage.py migrate 子应用名 --fake 完成迁移,数据库中的表会刷新。
#############
卷宗错误目标文件不正确 去sttings里找 可能是项目名不对称
迁移数据库报错也有可能是 sttings中 子应用没配置对 导致No changes detected等其他报错
提示csrf阻止 可能是stting中 没注释 或者是 没有配置白名单
》》》》 File "/home/online-training-system/backend/urls.py", line 20, in <module>
path('admin/', admin.site.urls), //注释这个
File "/home/myenv/lib/python3.10/site-packages/django/utils/functional.py", line 266, in inner
self._setup()
File "/home/myenv/lib/python3.10/site-packages/django/contrib/admin/sites.py", line 595, in _setup
AdminSiteClass = import_string(apps.get_app_config("admin").default_site)
File "/home/myenv/lib/python3.10/site-packages/django/apps/registry.py", line 165, in get_app_config
raise LookupError(message)
LookupError: No installed app with label 'admin'.