Django:syncdb在加载转储后没有创建新表

时间:2013-09-26 08:11:53

标签: python django postgresql

tl; dr:我们想在数据库中添加一个新表,而不会丢失以前的数据。

首先我们使用以下方法转储数据库:

$ psql -h localhost dbname > dump_file

然后我们将它加载到我们的本地数据库。这很好。

问题开始: 在向models.py添加新模型时,syncdb不会创建表。但是,如果我们创建一个新数据库(通过删除数据并运行syncdb),它将显示为已创建的表。

这是令人惊讶的,因为我们认为添加新表不是syncdb无法处理的“架构迁移”。因此,我们认为南方不会在这里提供帮助。

我有什么遗漏/错误吗?

这就是我们的代码:

class Person(models.Model):
    # attributes

class A(models.Model):
    # attributes

class B(models.Model):
    a_fk = models.ForeignKey(A)
    # more attributes

class ProblemModel(models.Model)
    p_fk = models.ForeignKey(Person)
    a_fk = models.ForeignKey(A)
    b_fk = models.ForeignKey(B)

使用命令的相关表的输出:

$ ./manage.py sqlall appname

是:

CREATE TABLE "appname_problemmodel" (
"id" serial NOT NULL PRIMARY KEY,
"p_fk" integer NOT NULL REFERENCES "appname_person" ("p_fk") DEFERRABLE INITIALLY DEFERRED,
"a_fk" integer NOT NULL REFERENCES "appname_a" ("id") DEFERRABLE INITIALLY DEFERRED,
"b_fk" integer NOT NULL REFERENCES "appname_b" ("id") DEFERRABLE INITIALLY DEFERRED
)

Django 1.5.1版

ProblemModel是我们试图添加的新模型。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

  

因此,我们认为南方在这方面没有帮助。

是的,只需使用it - official documentation即可开始使用。

答案 1 :(得分:0)

首先,您的数据恢复命令输入符号错误。它应该是: -

$ psql -h localhost dbname < dump_file

[django-admin-flush](https://docs.djangoproject.com/en/1.5/ref/django-admin/#=django-admin-flush)有一个使用选项将数据库转换到先前状态的示例 - * --no-initial-data *。

最好使用以下命令执行south -

('python manage.py migrate --no-initial-data')
('python manage.py syncdb')

要将数据还原到数据库,您可以使用dump with admin.py或直接使用您的 数据库命令。