首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django中的数据库问题:由于依赖关系无法重置

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

Stack Overflow用户
提问于 2009-11-10 02:38:32
回答 5查看 6.3K关注 0票数 17

我正在尝试重置Django中的数据库,使用:

代码语言:javascript
复制
python manage.py reset app

但会得到以下错误:

代码语言:javascript
复制
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文件的样子:

代码语言:javascript
复制
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

我知道我需要使用DROP...SQL中的级联命令,用于删除和重新创建数据库(django-admin.py的输出)。

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

更新

好了,我已经知道了如何手动删除表格(数据库是postgres),我在这里为有同样问题的人做了说明:

代码语言:javascript
复制
python manage.py dbshell 
# drop table app_record cascade; 
# \q 
python manage.py reset app 

我仍然想知道是否有人有更好的方法来做这件事:)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-09 23:47:41

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

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

代码语言:javascript
复制
python manage.py reset_db

如果你正在使用Django 1.2+,你应该显式地定义你想要重置的数据库。如果您的项目仅使用一个数据库,则可能应该设置--router=default

票数 5
EN

Stack Overflow用户

发布于 2010-01-14 15:02:34

我使用了一个小的unix管道,它将CASCADE添加到所有DROP语句中。

代码语言:javascript
复制
python manage.py sqlreset myapp | sed 's/DROP TABLE \(.*\);/DROP TABLE \1 CASCADE;/g' | \
psql --username myusername mydbname
票数 5
EN

Stack Overflow用户

发布于 2009-11-10 22:31:36

DROP TABLE CASCADE的问题是它只删除了相关表上的外键-在syncdb之后,这个关系不会被重新创建。我发现没有办法重新创建特定模型的表,所以我通过重新创建模式来重置整个应用程序:

代码语言:javascript
复制
  DROP SCHEMA public CASCADE;
  CREATE SCHEMA "public" AUTHORIZATION "owner of database";

这应该只适用于支持模式的数据库,例如postgresql

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1702906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档