表 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】:
在Choice
到Poll
上创建外键之前,您是否运行了python manage.py syncdb
?您可能需要删除数据库并再次运行它。
【讨论】:
以上是关于表 polls_choice 没有名为 poll_id 的列的主要内容,如果未能解决你的问题,请参考以下文章
android.database.sqlite.SQLiteException:表contact_data没有名为timestamp_的列