Django查询数据库时出现django.db.utils.OperationalError: no such table: Blog_username错误的求助
Django查询数据库时出现django.db.utils.OperationalError: no such table: Blog_username错误的求助
Hey,我仔细看了你的问题描述和代码片段,发现了几个关键问题,帮你一步步排查解决:
1. 模型字段拼写错误(最核心的问题)
先看你提供的Blog/models.py代码,这里有个很容易忽略的拼写错误:
class Person(models.Model): username = models.Charfield(max_length=30) # 这里的Charfield应该是CharField! first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
Django的字符字段类型是**CharField**(首字母F必须大写),你写成了Charfield(小写f),这个错误会导致Django无法正确解析模型字段,虽然运行makemigrations时没抛出明显错误,但实际上生成的迁移文件是无效的,最终导致数据库里没有创建正确的Blog_person表,反而出现了奇怪的Blog_username表不存在的错误提示。
2. 详细修复步骤
步骤1:修正模型拼写错误
把models.Charfield改成models.CharField,保存你的models.py文件。
步骤2:清理无效迁移并重新生成
先删除之前生成的无效迁移文件(Blog/migrations/0001_initial.py),然后在终端重新执行:
python manage.py makemigrations python manage.py migrate
这次执行migrate时,要确保终端输出里显示类似“Applying Blog.0001_initial... OK”的内容,而不是之前的“No migrations to apply.”。
步骤3:验证修复效果
重新进入Django shell测试:
python manage.py shell
在shell里执行:
from Blog.models import Person Person.objects.all()
这时候应该不会再报错了,你可以尝试创建一条测试数据来确认数据库同步正常:
test_person = Person(username="test_user", first_name="John", last_name="Doe") test_person.save() print(Person.objects.all())
3. 额外排查方案(如果上述步骤没解决问题)
如果还是有问题,可以试试这些方法:
- 检查项目根目录下的
db.sqlite3文件是否存在,有没有读写权限; - 确认
settings.py里的INSTALLED_APPS确实包含了'Blog.apps.BlogConfig'(你已经配置好了,这部分没问题); - 如果之前手动修改过迁移文件,建议清空
Blog/migrations目录下除了__init__.py之外的所有文件,然后删除db.sqlite3,重新执行makemigrations和migrate(注意:这会清空所有数据库数据,只适合测试环境)。
备注:内容来源于stack exchange,提问作者Tech_Dave
相关产品推荐
相关产品推荐

