You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:17:56