我创建了一个模型,并运行了 python manage.py syncdb 命令。我认为这在数据库中创建了一张表格。接着我意识到我错误地创建了一列,我进行了更改并再次运行了相同的命令,以为它会删除旧表并添加一个新表。
然后我进入 python manage.py shell,并尝试运行 .objects.all(),但失败了,提示说该列不存在。
我想清除旧表格,然后再次运行 syncdb,但我无法弄清楚如何做到这一点。
我创建了一个模型,并运行了 python manage.py syncdb 命令。我认为这在数据库中创建了一张表格。接着我意识到我错误地创建了一列,我进行了更改并再次运行了相同的命令,以为它会删除旧表并添加一个新表。
然后我进入 python manage.py shell,并尝试运行 .objects.all(),但失败了,提示说该列不存在。
我想清除旧表格,然后再次运行 syncdb,但我无法弄清楚如何做到这一点。
清除应用程序的方法就像写下这样简单的代码:
./manage.py sqlclear app_name | ./manage.py dbshell
然后为了重建您的表,只需键入:
./manage.py syncdb
没有任何答案显示如何在应用程序中删除一个表。这并不太困难。 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应用程序,它将为您迁移表。
dbshell
-- 我以前使用过shell
,但在将数据库更换为mysql后,它似乎不再允许我访问我的模型。现在dbshell
可以直接进入我的mysql shell -- 非常赞。 - twknab如果使用 Django 1.4 或更低版本,另一种简单的方法是
python manage.py reset app_name
该命令会删除并重新创建此应用程序模型使用的表。
在Django 1.3中已弃用,并且自Django 1.5起不再可用。
使用以下命令获取 DROP 语句:
python manage.py sqlclear 应用程序名称
然后尝试使用以下命令:
python manage.py dbshell
并执行 DROP 语句。
请参阅http://docs.djangoproject.com/en/dev/ref/django-admin/了解更多信息。
我也遇到了同样的问题。
如果你不介意失去你的表格/数据,你可以快速解决这个问题,只需要在models.py文件中更正所需的数据类型,删除Migration文件夹和db.SQLite3文件,然后重新运行以下命令:
这里可能需要对一些答案进行详细说明:
因此,您可以使用以下命令访问dbshell
:
python manage.py dbshell
因此,最好使用以下内容:
DROP TABLE appname_tablename CASCADE;
./manage.py migrate --run-syncdb