Django教程执行migrate无报错,但SQLite3中无表显示
确认连接的是正确的数据库文件
执行sqlite3命令时如果不指定路径,默认会打开当前终端目录下的db.sqlite3。如果你的db.sqlite3在django_test目录里,但你是在其他目录启动的sqlite3,自然看不到表。解决方式:要么先cd到django_test目录再执行sqlite3 db.sqlite3,要么直接指定完整路径,比如sqlite3 django_test/db.sqlite3。检查DATABASES配置路径是否正确
打开项目的settings.py,查看DATABASES配置块,确认NAME指向的是django_test目录下的db.sqlite3。正常配置如下:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }不确定路径是否正确的话,直接在终端执行
python manage.py shell,然后输入以下代码查看实际数据库路径:from django.conf import settings print(settings.DATABASES['default']['NAME'])对比这个路径和你打开的SQLite文件路径是否一致。
验证迁移是否真的生效
终端提示“迁移成功”可能是因为没有需要执行的迁移操作,或者迁移文件存在异常。执行python manage.py showmigrations,查看所有迁移项是否都标有[X]。如果有未应用的迁移,重新执行python manage.py migrate;如果全部已应用,再回到前面确认数据库路径。用SQL命令替代
.tables排查显示问题
有时候SQLite的.tables命令可能因为环境或权限问题无法正常显示表。可以在sqlite3交互界面执行SELECT name FROM sqlite_master WHERE type='table';,这个命令能直接从系统表查询所有数据表。如果能查到表,说明是.tables的显示问题;如果查不到,说明数据库确实没有生成表,需要重新排查迁移和配置。
内容的提问来源于stack exchange,提问作者csukcl

