python - Django:加载转储后 syncdb 不创建新表

标签 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 是我们要添加的新模型。

在此先感谢您的帮助!

最佳答案

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

$ 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')

要将数据恢复到数据库,您可以使用带有 admin.py 的转储或直接使用您的 数据库命令。

关于python - Django:加载转储后 syncdb 不创建新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022750/

相关文章:

python - Django Rest框架并使用source关键字获取序列化器值

python - django更改模型表单实例

sql - 如何翻译 Postgresql 9.3 查询以在 Postgresql 8.4 上使用?

multithreading - Postgresql parallel bulk INSERT with worker 不并行化

python - 在 CSV 文件 python 中添加带逗号的字符串

javascript - 如何将变量从python传递到javascript

python - Pandas/Pyplot 中的散点图 : How to plot by category with different markers

python - 如何下载目录中的产品?

python - 在 Django 设置中的功能?

5000~ 用户的 Java Web 应用程序