如何从DJango中删除SQLite3中的表?

Ale*_*lex 50 database sqlite django

我制作了一个模型,并运行了python manage.py syncdb.我认为在db中创建了一个表.然后我意识到我错误地创建了一个列,所以我更改了它,然后运行相同的命令,认为它会丢弃旧表,并添加一个新表.

然后我去了python manage.py shell,并尝试运行.objects.all(),它失败了,说该列不存在.

我想清除旧表,然后再次运行syncdb,但我无法弄清楚如何做到这一点.

Adr*_*ico 69

清除应用程序就像写作一样简单:

./manage.py sqlclear app_name | ./manage.py dbshell 
Run Code Online (Sandbox Code Playgroud)

然后为了重建你的表只需键入:

./manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

  • 不再适用于Django 1.9+:[Django 1.9中的弃用](https://docs.djangoproject.com/en/1.9/internals/deprecation/#deprecation-removed-in-1-9) (5认同)

Ofr*_*viv 38

使用Django 1.4或更低版本时,另一种简单的方法是

python manage.py reset app_name
Run Code Online (Sandbox Code Playgroud)

删除并重新创建此应用程序的模型使用的表.

这在Django 1.3中已被弃用,并且Django 1.5不再提供

  • 重命令命令已在Django 1.3中弃用,并且不再可用于Django 1.5.请检查我的答案. (36认同)

iam*_*mio 37

这些答案都没有显示如何删除应用中的一个表.这不是太困难.该dbshell命令将用户登录到sqlite3 shell.

python manage.py dbshell
Run Code Online (Sandbox Code Playgroud)

在shell中时,键入以下命令以查看数据库的结构.这将显示数据库中的所有表名(以及表中的列名).

SELECT * FROM sqlite_master WHERE type='table';
Run Code Online (Sandbox Code Playgroud)

通常,Django根据以下约定命名表:"appname_modelname".因此,实现目标的SQL查询将类似于以下内容:

DROP TABLE appname_modelname;
Run Code Online (Sandbox Code Playgroud)

即使表与其他表有关系,这也应该足够了.现在您可以通过执行以下命令注销SQLITE shell:

.exit
Run Code Online (Sandbox Code Playgroud)

如果再次运行syncdb,Django将根据您的模型重建表.这样,您可以更新数据库表而不会丢失所有应用程序数据.如果您遇到这个问题很多,请考虑使用South - 一个django应用程序,它将为您迁移表格.


Geo*_*dik 25

获取DROP语句

python manage.py sqlclear app_name

然后试试

python manage.py dbshell

并执行DROP语句

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


Kat*_*sso 18

我有同样的问题.

要快速解决(如果您不关心丢失表/数据),请更正包含所需数据类型的models.py文件,删除Migration文件夹和db.SQLite3文件,

然后重新运行以下命令:

  1. python manage.py migrate
  2. python manage.py makemigrations
  3. python manage.py migrate
  4. python manage.py createsuperuser(创建管理员用户/ pswd来管理管理页面)
  5. python manage.py runserver


Pre*_*rac 5

在 Django 2.1.7 中,我在SQLite 浏览器db.sqlite3中打开了该文件( Pypi上还有一个 Python 包)并使用命令删除了表

DROP TABLE appname_tablename;
Run Code Online (Sandbox Code Playgroud)

进而

DELETE FROM django_migrations WHERE App='appname';
Run Code Online (Sandbox Code Playgroud)

然后再次运行

python manage.py makemigrations appname
python manage.py migrate appname
Run Code Online (Sandbox Code Playgroud)