【问题标题】:Django get alter table commands for a moduleDjango 获取模块的更改表命令
【发布时间】:2012-07-31 08:39:36
【问题描述】:

我在我的模型中添加了一个新字段。从 django manage.py 我如何打印迁移(更改表语句)。以下 is_tag 是我的新字段

当我执行 sqlall 时,我得到以下输出。如何获取 alter table 命令

 root@rajeev-laptop:/opt/labs/labs_site# python manage.py sqlall content
 BEGIN;
 CREATE TABLE `content_content` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar(255) NOT NULL,
`uploaded_by_id` integer NOT NULL,
`is_local` integer NOT NULL,
`access` integer NOT NULL,
`fq_name` varchar(255) NOT NULL,
`description` longtext NOT NULL,
`is_tag` bool NOT NULL,
`timestamp` datetime NOT NULL
 )
 ;
    ALTER TABLE `content_content` ADD CONSTRAINT `uploaded_by_id_refs_id_4f9cfefd` FOREIGN KEY (`uploaded_by_id`) REFERENCES `users_userprofile` (`id`);
   CREATE INDEX `content_content_1bc5ce19` ON `content_content` (`uploaded_by_id`);
 COMMIT;

【问题讨论】:

    标签: django django-models django-admin django-manage.py


    【解决方案1】:

    syncdb will never alter tables,或者用文档自己的话来说:

    syncdb 只会为尚未安装的模型创建表。它永远不会发出 ALTER TABLE 语句来匹配安装后对模型类所做的更改。对模型类和数据库模式的更改通常涉及某种形式的歧义,在这些情况下,Django 必须猜测要做出的正确更改。在此过程中存在丢失关键数据的风险。

    要管理迁移,您应该使用South

    【讨论】:

    • 但我从来没有说过我想使用syncdb。我希望python manage.py命令给我alter语句..
    • 它不能,因为那里没有生成所需的 ALTER 语句的逻辑。您在sqlall 中看到的 ALTER 语句只是设置表所需的初始 sql。来自文档,sqlall:Prints the CREATE TABLE and initial-data SQL statements for the given app name(s).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2016-08-03
    • 2011-05-21
    • 1970-01-01
    相关资源
    最近更新 更多