【问题标题】:Django: syncdb not creating new table after dump is loadedDjango:加载转储后,syncdb未创建新表
【发布时间】:2013-09-26 08:11:52
【问题描述】:

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

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

$ psql -h localhost dbname > dump_file

然后我们将其加载到本地数据库。这工作正常。

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

这令人惊讶,因为我们不认为添加新表是 syncdb 无法处理的“模式迁移”。因此,我们认为 South 在这方面不会有所帮助。

我有什么遗漏/错了吗?

这就是我们的代码的样子:

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 是我们尝试添加的新模型。

提前感谢您的帮助!

【问题讨论】:

  • 您的新表中是否还有其他ForeignKey 定义?其他表中的NULLable 列可能存在问题,因此 Django 无法创建相关的 FK 关系。如果数据填充的表有一些未索引的列(?),在创建表之前检查 FK 关系可能会导致问题。我对这两者都不感兴趣,但可能会因为这些而出现问题。 syncdbcomment 是执行并完成还是挂起并等待?另外,你检查过你的错误日志吗?
  • 在这里大胆猜测一下,您的ProblemClass 的实际名称是其他 3 个模型类名称的组合吗?
  • 你添加了哪个模型类?请提供有关如何重新创建问题的分步说明。什么 django 版本。
  • @zsquare:不,完全不同
  • @FallenAngel: 1. 这些是新表 (ProblemModel) 中唯一的 FK。 2.数据填充的表目前没有索引,不知道你说的“创建表前检查FK关系”是什么意思

标签: python django postgresql


【解决方案1】:

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

$ 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* 将数据库恢复到先前状态的示例。

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

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

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

【讨论】:

    【解决方案2】:

    因此,我们认为 South 不会在这里提供帮助。

    是的,只需使用 it - official documentation 应该可以帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 2021-01-21
      • 2015-01-13
      • 2014-06-07
      相关资源
      最近更新 更多