如何从DJango的SQLite3中删除一个表?
我做了一个模型,并运行python manage.py syncdb。 我认为,在数据库中创build一个表。 然后我意识到我已经错误地创build了一个列,所以我改变了它,并运行了相同的命令,认为它会删除旧表,并添加一个新的表。
然后,我去了python manage.py shell,并试图运行.objects.all(),并失败,说该列不存在。
我想清除旧的表,然后再次运行syncdb,但我不知道如何做到这一点。
使用Django 1.4或更低版本的另一个简单的方法是,
python manage.py reset app_name
其中删除和重新创build该应用程序的模型使用的表。
这在Django 1.3中已被弃用,并且不再可以从Django 1.5中获得
清除一个应用程序就像写作一样简单:
./manage.py sqlclear app_name | ./manage.py dbshell
那么为了重build你的表,只需键入:
./manage.py syncdb
没有答案显示如何删除应用程序中的一个表。 这并不难。 dbshell
命令将用户login到sqlite3 shell。
python manage.py dbshell
当您在shell中时,键入以下命令以查看数据库的结构。 这将显示数据库中的所有表名(以及表中的列名)。
SELECT * FROM sqlite_master WHERE type='table';
通常,Django按照以下约定命名表:“appname_modelname”。 因此,完成您的目标的SQL查询将类似于以下内容:
DROP TABLE appname_modelname;
即使表格与其他表格有关系,也应该足够了。 现在,您可以通过执行以下命令注销SQLITE shell:
.exit
如果你再次运行syncdb,Django将根据你的模型重build表。 这样,您可以更新您的数据库表,而不会丢失所有的应用程序数据。 如果你遇到这个问题很多,可以考虑使用南 – 一个Django的应用程序,将为您的表迁移。
获取DROP语句
python manage.py sqlclear app_name
然后尝试
python manage.py dbshell
并执行DROP语句
我有同样的问题。
为了快速解决(如果您不关心丢失表/数据),请使用所需的数据types更正您的models.py文件,删除Migration文件夹和db.SQLite3文件,
然后重新运行以下命令:
- python manage.py迁移
- python manage.py makemigrations
- python manage.py迁移
- pythonmanage.py createsuperuser(创build一个pipe理员用户/ pswd来pipe理pipe理页面)
- python manage.py runserver
在Django 1.9中,我不得不采取Kat Russo的步骤,但是第二次迁移有点棘手。 你必须跑步
./manage.py migrate --run-syncdb