欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python遇到的问题及解决方法

程序员文章站 2022-06-04 14:33:31
...

一、
1.问题:
pycharm异常:

django2.2报错:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa6 in position 9737: illegal multibyte sequence
2.原因:

window控制台默认gbk编码,而我们通常用的是utf8
3.解决:

打开django/views下的debug.py文件,转到line331行:
   with Path(CURRENT_DIR, ‘templates’, ‘technical_500.html’).open() as fh
  将其改成:
    with Path(CURRENT_DIR, ‘templates’, ‘technical_500.html’).open(encoding=“utf-8”) as fh

就成功了。
3.解决思路:

解决方法完全是依照异常信息来的。

二、
1.问题:
python manage.py makemigrations 报错
2.解决:
##错误1:
raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.’ % Database.version)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
solution:
.\Lib\site-packages\django\db\backends\mysql.路径下找到base.py, 修改如下内容:
#if version < (1, 3, 13): ==> if version < (1, 3, 3):

##错误2: query = query.decode(errors=‘replace’)
AttributeError: ‘str’ object has no attribute ‘decode’
solution:
去到python的安装路径: \Lib\site-packages\django\db\backends\mysql
open ./site-packages/django/db/backends/mysql/operations.py
将decode改为encode

##错误3:
File “C:\Python\Python37\lib\site-packages\django\template\backends\django.py”, line 125, in get_package_libraries
“trying to load ‘%s’: %s” % (entry[1], e)
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load ‘django.contrib.admin.templatetags.admin_static’: cannot import name ‘RemovedInDjango30Warning’ from ‘django.utils.deprecation’ (.\lib\site-packages\django\utils\deprecation.py)

三、
问题描述:
已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrations确认成功,执行python manage.py migrate,提示No migrations to apply.

排查过程
python manage.py dbshell 进到数据库里面,查看是否表已存在
结果:表不存在
检查migrations文件
结果:文件没问题
百度 google 各种搜,乱投医,各种尝试
2.解决方案
python manage.py dbshell 进到数据库中,执行delete from django_migrations where app=‘your_appname’;
python manage.py makemigrations(若migrations文件未删除,可不执行这一步)
python manage.py migrate 好啦,大功告成
原因分析
查看django_migrations表结构
建表语句:
CREATE TABLE “django_migrations” (“id” integer NOT NULL PRIMARY KEY AUTOINCREMENT, “app” varchar(255) NOT NULL, “name” varchar(255) NOT NULL, “applied” datetime NOT NULL);
原因
造成多次应用migrations失败的原因是,当前model是修改过的,原来的migrations已经被我删除,但是,重新生成的migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字的文件都已被记录,在Django看来,被记录了就相当于已应用,所以,会出现刚开始的No migrations to apply.

四、
Running migrations: No migrations to apply.(django不能创建数据库中的表的问题)

第一步:

删除该app名字下的migrations下的__init__.py等文件。

第二步:

进入数据库,找到django_migrations的表,删除该app名字的所有记录。

第三步:执行下面这两条命令:(在项目目录下)

python manage.py makemigrations

python manage.py migrate

原因:

django_migrations表记录着数据库的对应表的修改记录。

每次修改后,都执行第三步的命令,然后在第一步的文件夹下生成修改的文件,django_migrations表记录修改的变更过程。

五、
django数据迁移命令执行成功,但未在数据库中生成表

原因:

1、因数据库默认字符集不是utf8,当上传中文字符时报错。

2、处理过程中删除了原数据表,重新迁移,数据库表未能创建

解决步骤:

1、修改数据库中相应表的字符集,上传数据失败。
2、修改整个数据库的字符集,上传数据失败。
3、修改mysql配置文件/etc/my.cnf.d/server.cnf,重启数据库,上传数据失败

因表中无重要数据,故删除相应的表。再重新迁移。此时问题出现。

1、执行python manage.py makemigrations :未报错,但是已经创建过一4次,故没有任何改变

2、执行python manage.py migrate :未报错,但是数据库中未能重新生成表

3、重试几次无果后,数据库下django_migrations表因上一次数据迁移提交已记录,且此次models表未做改变。忽略了此次提交

4、重新执行python manage.py makemigrations 和 python manage.py migrate。无报错信息。但创建失败。

5、删除post应用下 migrations文件夹。执行python manage.py makemigrations。迁移文件夹migrations 未能重新创建

6、执行python manage.py makemigrations post 指定应用,post/migrations 迁移文件夹生成成功。

7、python manage.py migrate 数据库表创建成功。

8、前端重新测试提交中文数据,数据提交成功