DatabaseError:表OmniCloud_App_user没有名为username的列

时间:2011-10-07 21:45:44

标签: python django sqlite terminal

所以我在尝试将用户添加到数据库时得到了这个。我想,我想知道它有哪些列?所以我要求sql ...

DatabaseError: table OmniCloud_App_user has no column named username
>>> 
root@Harold:~/OmniCloud/omnicloud# python manage.py sql OmniCloud_App
BEGIN;
CREATE TABLE "OmniCloud_App_user" (
    "id" integer NOT NULL PRIMARY KEY,
    "email" varchar(75) NOT NULL,
    "username" varchar(25) NOT NULL,
    "password" varchar(30) NOT NULL
)
;

喂!它就是!如果看起来事实上已经说过专栏,为什么会对以下两行感到生气?

>>> u = User(email="gmail@gmail.com", username="gmail", password="gmail")
>>> u.save()

也不是我如何定义User类,它说user没有名为username的列。为什么它变成小写?

2 个答案:

答案 0 :(得分:2)

  • 您是否运行了$> python manage.py syncdb
  • 您是否在第一次运行syncdb后更改了模型(添加了用户名)
  • 你在使用南方吗?如果没有,你应该了解它。

Syncdb仅适用于新型号。你必须自己解决迁移问题,这就是South的用武之地。

或者,您可以自己修改数据库,或者使用另一个更接近该方法的应用程序,称为nashvegas。

这是您需要的SQL的近似值。

ALTER TABLE OmniCloud_App_user ADD COLUMN "username" varchar(25) NOT NULL;

答案 1 :(得分:0)

如果您要求manage.py sql立即创建它,

syncdb会为表 提供SQL。它没有显示实际表的内容 - 因为您将不得不进入db shell并要求它为您描述该表。然后,您需要直接修改它,或者通过像South这样的迁移工具进行修改。