如何从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语句

检查出http://docs.djangoproject.com/en/dev/ref/django-admin/

我有同样的问题。

为了快速解决(如果您不关心丢失表/数据),请使用所需的数据types更正您的models.py文件,删除Migration文件夹和db.SQLite3文件,

然后重新运行以下命令:

  1. python manage.py迁移
  2. python manage.py makemigrations
  3. python manage.py迁移
  4. pythonmanage.py createsuperuser(创build一个pipe理员用户/ pswd来pipe理pipe理页面)
  5. python manage.py runserver

在Django 1.9中,我不得不采取Kat Russo的步骤,但是第二次迁移有点棘手。 你必须跑步

 ./manage.py migrate --run-syncdb