表 polls_choice 没有名为 poll_id 的列

Posted

技术标签:

【中文标题】表 polls_choice 没有名为 poll_id 的列【英文标题】:table polls_choice has no column named 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

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

【问题讨论】:

【参考方案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?您可能需要删除数据库并再次运行它。

【讨论】:

以上是关于表 polls_choice 没有名为 poll_id 的列的主要内容,如果未能解决你的问题,请参考以下文章

013_Linux驱动之_poll机制

android.database.sqlite.SQLiteException:表contact_data没有名为timestamp_的列

按照Django官网,创建一个web app 创建app/创建相应的数据库表

数据结构 - QueueDeque 接口

笔记select, poll, epool

字符设备驱动程序之poll机制