我制作了一个模型,并运行了python manage.py syncdb.我认为在db中创建了一个表.然后我意识到我错误地创建了一个列,所以我更改了它,然后运行相同的命令,认为它会丢弃旧表,并添加一个新表.
然后我去了python manage.py shell,并尝试运行.objects.all(),它失败了,说该列不存在.
我想清除旧表,然后再次运行syncdb,但我无法弄清楚如何做到这一点.
清除应用程序就像写作一样简单:
./manage.py sqlclear app_name | ./manage.py dbshell
然后为了重建你的表只需键入:
./manage.py syncdb
使用Django 1.4或更低版本时,另一种简单的方法是
python manage.py reset app_name
删除并重新创建此应用程序的模型使用的表.
这在Django 1.3中已被弃用,并且Django 1.5不再提供
这些答案都没有显示如何删除应用中的一个表.这不是太困难.该dbshell
命令将用户登录到sqlite3 shell.
python manage.py dbshell
在shell中时,键入以下命令以查看数据库的结构.这将显示数据库中的所有表名(以及表中的列名).
SELECT * FROM sqlite_master WHERE type='table';
通常,Django根据以下约定命名表:"appname_modelname".因此,实现目标的SQL查询将类似于以下内容:
DROP TABLE appname_modelname;
即使表与其他表有关系,这也应该足够了.现在您可以通过执行以下命令注销SQLITE shell:
.exit
如果再次运行syncdb,Django将根据您的模型重建表.这样,您可以更新数据库表而不会丢失所有应用程序数据.如果您遇到这个问题很多,请考虑使用South - 一个django应用程序,它将为您迁移表格.
获取DROP语句
python manage.py sqlclear app_name
然后试试
python manage.py dbshell
并执行DROP语句
查看http://docs.djangoproject.com/en/dev/ref/django-admin/
我有同样的问题.
要快速解决(如果您不关心丢失表/数据),请更正包含所需数据类型的models.py文件,删除Migration文件夹和db.SQLite3文件,
然后重新运行以下命令:
python manage.py migrate
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser(创建管理员用户/ pswd来管理管理页面)
python manage.py runserver