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')
要将数据还原到数据库,可以将dump与admin.py一起使用,或者直接使用database命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句