Django中的数据库问题:由于依赖关系而无法重置?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

我试图在Django中重置一个数据库,使用:

python manage.py reset app

但出现以下错误:

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.

这就是我的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

我得知我需要在SQL中使用DROP ... CASCADE命令来删除并重新创建数据库(django-admin.py的输出)。

但是,如何直接从models.py编辑SQL?

我想出了如何手动删除表(数据库是postgres),在这里为任何有同样问题的人指出:

python manage.py dbshell 
# drop table app_record cascade; 
# \q 
python manage.py reset app 

仍然想知道是否有人有更好的方式来做到这一点。

提问于
用户回答回答于

完全重置Django数据库的简单方法是使用django-extensions。

它有一个reset_db支持所有Django默认数据库后端的命令。

python manage.py reset_db

如果你使用的是Django 1.2+,则应明确定义要重置的数据库。如果你的项目只使用一个数据库,你应该设置--router=default。

用户回答回答于
python manage.py sqlreset myapp | sed 's/DROP TABLE \(.*\);/DROP TABLE \1 CASCADE;/g' | \
psql --username myusername mydbname

扫码关注云+社区

领取腾讯云代金券