DatabaseError:没有这样的列错误

时间:2011-09-06 17:19:36

标签: django django-models

所以我有一个模型,我想添加ImageField,所以我输入     picture = models.ImageField(upload_to ='media / images')

然后我运行了syncdb并进入了shell:

python2 manage.py syncdb
python2 manage.py shell

然后我导入了模型并尝试了

"model".objects.get(pk=1)

我收到错误:

DatabaseError: no such column: people_people.picture

当我为模型运行manage.py sql

"picture" varchar(100) NOT NULL

在数据库中。

你们有什么解决方案?我无法删除数据库中的数据。

3 个答案:

答案 0 :(得分:27)

the documentation syncdb中所述,不会向现有表添加列,只会创建新表。

我建议运行

python manage.py sqlall <your_app>

查看它为您正在更改的表输出的sql,然后运行

python manage.py dbshell

以手动发出ALTER TABLE命令。

将来,您可能希望使用South等迁移工具。

答案 1 :(得分:3)

有两种可能性来获取此错误1)在执行syncdb之后,您向模型添加了额外的字段。 2)你在django中为model.py文件添加了新类。

解决方法是:

首先使用命令

向南安装
for windows: **easy_install south**     //for that you need to go to the script folder of python folder in c drive.

for linux: **sudo easy_install south**  

然后按照此处包含的步骤进行迁移教程

step1- python manage.py schemamigration your_app_name --initial

step-2 python manage.py迁移your_app_name 希望这会对你有所帮助。

答案 2 :(得分:0)

从1.7 migrations within Django取代南方。

通过在终端中运行以下命令来创建一组新的迁移说明:

$ python manage.py makemigrations

检查它创建的迁移文件夹中的输出以确保它们有意义然后运行以下terminal命令来完成迁移:

$ python manage.py migrate

那就是它。

以这种方式运行迁移允许其他人实现相同的迁移,而不必使用代码在每台计算机上手动实现db更改。在新机器上,他们必须运行的是:

$ python manage.py migrate