【问题标题】:Drop and recreate old tables in Django在 Django 中删除并重新创建旧表
【发布时间】:2012-06-02 16:19:32
【问题描述】:

我正处于开发的初始阶段,模型正在发生很大变化。
我必须继续删除旧表,然后执行“syncdb”

虽然我很欣赏 syncdb 不改变旧表的原因,但

是否可以(或有其他替代方法)自动删除旧表,然后运行 ​​syncdb?

【问题讨论】:

  • @Pramod 看起来确实像,但这些答案来自 4 年前。难道现在有更好/更简单的解决方案吗?
  • 我不这么认为。我用过 South,对我来说效果很好。

标签: django django-models django-syncdb


【解决方案1】:

我通常这样做是在数据库级别。例如,如果您正在使用 postgres,并且只是想吹走整个数据库以重新开始,您可以这样做:

dropdb -U postgres "dbname"
createdb -U postgres -O "db_user" "db_name"

对于我正在进行的长期项目,我使用fabfile 来自动执行上述任务,以及从我的生产服务器获取最新的数据库,并覆盖我的本地开发数据库。

另外,相关的是数据库“迁移”,当您在生产环境中运行一段时间后更改代码时,这将成为一项要求。很多人/应用程序使用South,但我更喜欢Nashvegas 用于我的网站。

使用 Nashvegas,我将创建一个 0001_add_field_blah.sql 文件,其中包含用于更改数据库的原始 SQL 命令。例如:

ALTER TABLE myapp_model RENAME COLUMN first_name TO given_name;

【讨论】:

  • 您介意分享您的 fabfile 吗?我是 Python 新手,将是一个很好的学习点。另外,关于 Fab 的一个问题:相同的命令在 Windows shell 和 Linux shell 中都可以工作吗?还是我误解了它的用途?
  • 唉,我的 fabfile 已经相当有机地增长了,而且有点不整洁。除了创作者之外,对任何人都没有多大用处。不过,我刚刚发现了一个 django-fabdeploy-plus 项目,它可能对您有所帮助。
  • 我想我会和南方一起去。对我来说似乎很轻松:)
【解决方案2】:

我使用python manage.py reset <app>。我不认为有办法在整个项目范围内做到这一点。

【讨论】:

  • 我在 Django 文档中找不到这个... 1.4 支持这个吗?
  • 我在 1.3 中使用它。你是对的,它从 1.4 文档中消失了……你可以试试python manage.py,它列出了支持的命令。在 1.3 中,reset <app> 删除并为指定的应用创建表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多