Django数据库报错相关问题总结(初始化、迁移等)

整理学习Django过程中遇到的问题

如何新建用户

  • 新建超级用户
python manage.py createsuperuser 

在命令行中依次输入用户名、邮箱地址(选填,可为空)、密码、二次确认密码即可,命令行中输入密码不会显示*号,确保两次输入的密码相同。密码过短或是与账户名相同会出现提示,直接输入y即可强行生成。

  • 新建普通用户
python manage.py shell

直接使用 Django 的 shell 命令对用户进行新建,具体操作如下

>>>from django.contrib.auth.user import User
>>>user = User.objects.create_user('用户名', '邮箱地址', '密码')
>>>user.save()

邮箱地址可以为空,此方法适用于 Django 3.2 ,官方说明文档在此

数据库迁移相关报错

ProgrammingError: relation “django_content_type” already exists. 报错

在 Django 1.8 以后的版本中,可以使用虚拟初始化的方式,将已经存在的数据库表进行跳过操作,使用方法为:

python manage.py migrate --fake-initial

可以跳过所有已经生成的表,继续生成其他未生成的表。官方说明文档在此
在这里插入图片描述

项目迁移后不生成表(无法根据模型生成表,无法检测到数据库修改)

一般常见于直接删除数据库文件,正常删除数据库应按照以下顺序:

  1. 删除数据库中的表,使用drop table命令。
  2. 注释掉model.py文件中不需要的模型。
  3. 生成新的迁移文件并执行python manage.py makemigration,python manage.py migrate

其他情况下删除数据库可能出现无法生成表的问题,按照如下顺序排查问题:

  1. 删除应用下migrations文件夹中除了__init__.py以外的所有文件。
  2. 使用工具打开目录中的db.sqlite3,找到django_migration表,并删除表中的所有数据
  3. 重新使用命令生成迁移文件并执行python manage.py makemigration,python manage.py migrate

其中 macOS 可以使用自带的终端功能对数据库进行修改

>>>sqlite3 数据库所在路径
>>>.table #用于查看所有的表
>>>delete * from django_migrations; #注意分号不能漏,执行完毕后即删除所有的迁移记录

猜你喜欢

转载自blog.csdn.net/qq_20728575/article/details/121863671