【问题标题】:Manage.py sqlall <myapp> does not create columnManage.py sqlall <myapp> 不创建列
【发布时间】:2012-09-18 08:09:30
【问题描述】:

我将orgname = models.CharField(max_length=50) 添加到我的models.py 中的现有类中并运行python manage.py syncdb 但发现它不会创建列(顺便说一下,我使用的是PostgreSQL),所以我需要这样做python manage.py sqlall &lt;myapp&gt; 我做了,它输出了以下内容:

BEGIN;
CREATE TABLE "file_uploader_files" (
    "id" serial NOT NULL PRIMARY KEY,
    "file" varchar(100) NOT NULL,
    "orgname" varchar(50) NOT NULL
)
;
COMMIT;

然而,当我进入 Django 的 shell 或查看 pgAdmin3 时,仍然没有创建该列。我究竟做错了什么?我会手动添加它,但我不确定如何添加。

附:该表已经预先创建,文件 varchar, orgname 也是在我最初创建该列之后出现的。

【问题讨论】:

    标签: python django postgresql django-models


    【解决方案1】:

    sqlall command 的文档说:

    打印给定应用名称的 CREATE TABLE 和初始数据 SQL 语句。

    它打印 SQL,它不运行任何东西。 Django 永远不会修改你的模式,你需要自己做——上面的输出可以帮助你显示 orgname 字段的类型。或者使用类似 South 的东西。

    【讨论】:

    • 这表示该列已经在表中创建(在 PgAdmin3 中,当我尝试自己添加该列时)但我无法在任何地方找到它,并且它没有显示在 PgAdmin3 中。顺便感谢您的帮助。
    【解决方案2】:

    另请参阅这个 SO 问题:update django database to reflect changes in existing models(前两个答案涵盖了您的问题)。

    来自accepted answer

    注意:syncdb 无法更新您现有的表。有时无法自动决定要做什么 - 这就是南方脚本如此出色的原因。

    而在另一个another answer...

    python manage.py reset <your_app>
    

    这将更新您应用的数据库表,但会完全销毁这些表中存在的所有数据。

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 1970-01-01
      • 2020-06-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      相关资源
      最近更新 更多