【问题标题】:table polls_choice has no column named poll_id表 polls_choice 没有名为 poll_id 的列
【发布时间】:2013-07-29 03:13:38
【问题描述】:

我正在学习 Django 教程的第 2 部分。这是我尝试在 Django 管理中添加“选择”时遇到的错误

DatabaseError: table polls_choice has no column named poll_id

这是我运行命令时得到的

python manage.py sql polls

BEGIN;
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL
)
;
CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
)
;

COMMIT; 

这是我的 settings.py

http://pastebin.com/g4KvigqX

非常感谢任何帮助!谢谢!

【问题讨论】:

    标签: python django sqlite


    【解决方案1】:

    听起来您在运行 syncdb 后添加了轮询外键。 syncdb 创建表,但如果您添加/更改/删除字段,则不会进行迁移。

    对于 Django 1.7+,您应该使用迁移而不是 syncdb。对于 Django south 进行数据库迁移。

    但是,由于您正在学习本教程,并且没有任何重要数据,因此最简单的做法是删除表并重新创建它。在数据库 shell 中运行以下命令:

    drop table polls_choice;
    

    然后再次运行 syncdb 以重新创建表。

    如果你的 db 中不需要任何数据,删除 sqlite db 文件,然后再次运行 syncdb 会更快。

    【讨论】:

    • 不确定如何删除 sqlite3 上的 polls_choice =/ 似乎无法在 shell 中显示我的表格
    • @Liondancer 您无法通过命令行访问 sqlite 数据库。最好的办法是删除数据库文件,重新创建它,然后再次运行 syncdb。
    • @Ergusto 如果没有重要数据,删除 db 文件并再次运行 syncdb 可能是最快的方法。但是你说的你不能通过命令行访问sqlite数据库是什么意思? dbshell 管理命令或sqlite3 <dbfile> 怎么样?
    • @Alasdair 看来你是对的。我会编辑我的回复。编辑:由于某种原因无法编辑它。但这实际上有点令人沮丧。我以前也遇到过这种情况,总是只好删除文件。
    • 运行python ./manage dbshell 然后.tables 应该可以工作。
    【解决方案2】:

    ChoicePoll 上创建外键之前,您是否运行了python manage.py syncdb?您可能需要删除数据库并再次运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2020-05-30
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多