【问题标题】:DatabaseError: table OmniCloud_App_user has no column named usernameDatabaseError:表 OmniCloud_App_user 没有名为 username 的列
【发布时间】:2011-10-07 21:45:43
【问题描述】:

所以我在尝试将用户添加到数据库时得到了这个。我想,我想知道它有哪些列?所以我要了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 没有名为用户名的列。为什么要小写?

【问题讨论】:

    标签: python django sqlite terminal


    【解决方案1】:
    • 您是否运行过$> python manage.py syncdb
    • 自从您第一次运行 syncdb 后,您是否更改了模型(添加了用户名)?
    • 您使用的是南方吗?如果没有,您可能应该了解它。

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

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

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

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

    【讨论】:

    • South 运行良好。我确实必须迁移,您的建议非常有帮助。谢谢!
    【解决方案2】:

    manage.py sql 给出了如果您要求syncdb 现在创建表 具有的 SQL。它不会向您显示表 实际上 有什么 - 因为您将不得不进入您的 db shell 并要求它为您描述表。然后,您需要直接修改它,或者通过 South 这样的迁移工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多