本文介绍: 知识量决定了未来能走多远

目录

一、迁移命令

(一)前提

(二)生成迁移文件

(三)执行迁移

二、迁移问题

1. Error:No changes detected

2. Error:You are trying to add a non-nullable field ‘XXX’ to XXX without a default 

解决方法(1)根据系统提供的选项,选择1

解决方法(2)根据系统提供的选项,选择2

        ① 增加 null = True 属性

        ② 增加 default = ” ”  属性

        ③ 删除有问题的model

        ④ 检查migrations文件

3. Error:django.db.utils.OperationalError: connection to server at “10.XXX.X.X”, port 5432 failed: FATAL:  password authentication failed for user “XXX”

4. Error:File “D:XXXvenv368libsite-packagesdjangodbmigrationsoperationsmodels.py”, line 677, in state_forwards。model_state = state.models[app_label, self.name_lower]。KeyError: (‘luoboapp’, ‘Book’)

原因:

解决:

5. File “D:XXXvenv368libsite-packagesdjangodbbackendsutils.py”, line 84, in _execute。return self.cursor.execute(sql, params)。django.db.utils.IntegrityError: column “author_id_id” of relation “Book” contains null values

原因:

解决:

6. in parse_datetime, match = datetime_re.match(value), TypeError: expected string or bytes-like object(类型错误:预期的字符串或类似字节的对象)

原因:

解决:


一、迁移命令

(一)前提

        若是修改 / 新增结构,需先保证原来产生的迁移文件还保留着。

(二)生成迁移文件

# 终端执行
python manage.py makemigrations BookApp

# 其中,BookApp是Application专案名,方便找到唯一models.py文件
# Application具体是在settings.py文件中设置的。即:INSTALLED_APPS = ['BookApp']

(三)执行迁移

# 终端执行
python manage.py migrate

二、迁移问题

1. Error:No changes detected

        原因:未指定执行的Application

        解决如下

# 终端执行
# 1.这是遇到问题的终端命令
python manage.py makemigrations BookApp

python manage.py migrate

# 2.这是修改过后的终端命令
python ./manage.py makemigrations BookApp

python manage.py migrate

2. Error:You are trying to add a nonnullable field ‘XXX’ to XXX without a default 

解决

解决方法(1)根据系统提供的选项选择1

        选择1,则代表系统自动设置默认属性,并让用户提供一个默认值

        即,操作:先输入1,回车,再输入任意值,回车

        若还有其他栏位也是出现这种情况,继续选择1,输入默认值

解决方法(2)根据系统提供的选项选择2

        选择2,则用户自定义设置。

        即,操作输入2,直接退出

        输入2退出指令后,再接着用以下其一操作解决

        ① 增加 null = True 属性

                操作:给字段添加允许为空的属性,下指令然后恢复字段,又下指令(该操作类似于系统选项1的解决办法)。

        ② 增加 default = ” ”  属性

                操作:给字段添加默认值的属性,下指令然后恢复字段,又下指令

        ③ 删除有问题的model

                操作删除model,下指令,然后恢复model,又下指令。

        ④ 检查migrations文件

                注意:若确定栏位没有问题,则确保之前的migrations文件没有问题。

3. Errordjango.db.utils.OperationalError: connection to server at “10.XXX.X.X”, port 5432 failed: FATAL:  password authentication failed for user “XXX”

        解决:确保项目settings.py文件上设置的数据库 ‘USER’ 和 ‘PASSWORD’ 的值,与在 PostgreSQL数据库创建用户名密码匹配

4. Error:File “D:XXXvenv368libsitepackagesdjangodbmigrationsoperationsmodels.py“, line 677, in state_forwards。model_state = state.models[app_label, self.name_lower]。KeyError: (‘luoboapp‘, ‘Book‘)

原因

model(如Book)被其他model(如Library)进行了外键关联,在其他model有一些栏位的变动并下迁移指令时,会寻找该model(如Book)。

若该model(如Book)此时已经重命名了(系统最后才会更新model名,如LuoboBook,而其他model关联的是旧该model名,如Book),则其他model就找不到该model(如LuoboBook),则会报错

解决:

执行迁移文件时,选择不要重新命名Book模型名。输入N。

如 Did you rename the luoboapp.Book model to LuoboBook? [y/N] N

再操作:把model还原成以前的model名(如Book)。再删掉生成的migration文件,重新下指令。生成新的migration文件后,再将model名改成新名字(如LuoboBook)。再下指令,生成第二个新的migration文件。然后就能成功执行migrate。

5. File “D:XXXvenv368libsitepackagesdjangodbbackendsutils.py”, line 84, in _executereturn self.cursor.execute(sql, params)。django.db.utils.IntegrityError: columnauthor_id_id” of relation “Book” contains null values

原因

        该model新增字段,但是该model对应数据库表还存在原来的数据记录

解决:

        清空该model对应的表的所有数据

6. in parse_datetime, match = datetime_re.match(value), TypeError: expected string or byteslike object类型错误:预期的字符串或类似字节对象

原因

针对model时间属性栏位,如 lasttime=models.DateTimeField(default=timezone.now) 改成
 lasttime=models.DateTimeField(auto_now_add=True)时,可以正常执行生成新的迁移文件,然而执行migrate同步数据库时,由于数据库中已经存储有旧数据,所以需要给旧数据的新属性栏位设置默认值

解决:

        设置默认值如下方图解(选择1,设置默认时间然后就能正常执行migrate)

以上大部分问题是数据同步有误、或migrations文件有冲突

若实在找不到方法解决类似问题,则使用简单粗暴的方法

即,把migrations文件夹的所有py文档删除(除了__init__.py),再把数据删除重新创建。若担心操作有误,可以提前备份

原文地址:https://blog.csdn.net/xiaoxiaoluobogan/article/details/134675385

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44052.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注