我正在尝试使用以下方法重置Django中的数据库:
python manage.py reset app
Run Code Online (Sandbox Code Playgroud)
但是得到以下错误:
Error: Error: app couldn't be reset. Possible reasons:
* The database isn't running or isn't configured correctly.
* At least one of the database tables doesn't exist.
* The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlreset app'. That's the SQL this command wasn't able to run.
The full error: cannot drop table app_record because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too.
Run Code Online (Sandbox Code Playgroud)
这是我的models.py文件的样子:
class Record(models.Model):
name = models.CharField(max_length=50, db_index=True)
year = models.IntegerField(blank=True, null=True)
def __unicode__(self):
return self.name
class Class(models.Model):
record = models.ForeignKey(Record)
def __unicode__(self):
return self.id
Run Code Online (Sandbox Code Playgroud)
我得到了我需要在SQL中使用DROP ... CASCADE命令删除并重新创建数据库(django-admin.py的输出).
但是如何直接从models.py编辑SQL?
UPDATE
好的,我想出了如何手动删除表(数据库是postgres),这里已经注意到有同样问题的人:
python manage.py dbshell
# drop table app_record cascade;
# \q
python manage.py reset app
Run Code Online (Sandbox Code Playgroud)
仍然想知道是否有人有更好的方法来做到这一点,但:)
我使用一个小的 unix 管道将 CASCADE 添加到所有 DROP 语句。
python manage.py sqlreset myapp | sed 's/DROP TABLE \(.*\);/DROP TABLE \1 CASCADE;/g' | \
psql --username myusername mydbname
Run Code Online (Sandbox Code Playgroud)
小智 5
完全重置Django数据库的简单方法是使用django-extensions。
它具有reset_db
支持所有Django默认数据库后端的命令。
python manage.py reset_db
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Django 1.2+,则应明确定义要重置的数据库。如果您的项目仅使用一个数据库,则应设置--router=default