如何在Django中重置数据库?我收到命令“重置”未找到错误


98

在此处按照示例通过Django进行学习:http://lightbird.net/dbe/todo_list.html

该教程说:

“这改变了我们的表布局,我们必须要求Django重置并重新创建表:

manage.py reset todo; manage.py syncdb

但是,当我运行时manage.py reset todo,出现错误:

$ python manage.py reset todo                                       
- Unknown command: 'reset'

这是因为我使用的是sqlite3而不是Postgresql吗?

有人可以告诉我重置数据库的命令是什么吗?

命令:python manage.py sqlclear todo返回错误:

$ python manage.py sqlclear todo    
CommandError: App with label todo could not be found.    
Are you sure your INSTALLED_APPS setting is correct?

因此,我在settings.py的INSTALLED_APPS中添加了“ todo”,然后python manage.py sqlclear todo再次运行,导致此错误:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined

Answers:


153

reset已被flushDjango 1.5 取代,请参阅:

python manage.py help flush

4
不幸的是,这不适用于个别应用,如manage.py reset <appname>一样。它导致错误:CommandError:Command不接受任何参数
Andre

5
幸运的是,有人将其移植回 1.5 :)
robertklep

谢谢,众所周知,最近(最新修改时间为6个月前)仍然关于灯具的django公共文档仍在(2019-07-11)讨论“重置”:code.djangoproject.com/wiki/Fixtures
vchrizz

34

看起来“冲洗”答案适用于部分情况,但不是全部情况。我不仅需要刷新数据库中的值,还需要正确地重新创建表。我还没有使用迁移(早期),所以我确实需要删除所有表。

我发现删除所有表的两种方法都需要核心django以外的东西。

如果您使用的是Heroku,请使用pg:reset删除所有表:

heroku pg:reset DATABASE_URL
heroku run python manage.py syncdb

如果您可以安装Django扩展,则可以通过以下方式完全重置:

python ./manage.py reset_db --router=default

6
@jonalv,您必须先安装django-extensions
edjroot

6
另外,您需要将其包含在INSTALLED_APPSsettings.py
Max Candocia

21

与LisaD的答案类似,Django扩展具有出色的reset_db命令,该命令可以完全删除所有内容,而不仅仅是像“ flush”一样截断表。

python ./manage.py reset_db

仅仅刷新表并不能解决在删除对象时发生的永久性错误。进行reset_db解决了该问题。


1
这就是我一直在寻找的东西,但是我不必提供任何--router论据,也许五年后现在是可选的?:)
damd


11

如果要清理整个数据库,则可以使用: python manage.py flush 如果要清理Django应用程序的数据库表,则可以使用: python manage.py migration appname 0


9

使用django 1.11,只需从migrations每个应用程序的文件夹中删除所有迁移文件(除外的所有文件__init__.py)。然后

  1. 手动删除数据库。
  2. 手动创建数据库。
  3. 运行python3 manage.py makemigrations
  4. 运行python3 manage.py migrate

瞧,您的数据库已完全重置。


如果使用sqlite,则无需手动创建数据库,python3 manage.py makemigrations并且 python3 manage.py migrate至少在django 2.0中会解决这一问题
toto_tico

4

对我来说,这解决了问题。

heroku pg:reset DATABASE_URL

heroku run bash
>> Inside heroku bash
cd app_name && rm -rf migrations && cd ..
./manage.py makemigrations app_name
./manage.py migrate

3

只是跟进@LisaD的答案。
截至2016年(Django 1.9),您需要输入:

heroku pg:reset DATABASE_URL
heroku run python manage.py makemigrations
heroku run python manage.py migrate

这将为您提供Heroku中的全新数据库。


1
  1. 只需手动删除数据库即可。确保首先创建备份(在我的情况下db.sqlite3是我的数据库)

  2. 运行此命令 manage.py migrate


1
python manage.py flush

删除旧的数据库内容,

不要忘记创建新的超级用户:

python manage.py createsuperuser
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.