Database 如何从DJango中的SQLite3删除表?
我创建了一个模型,并运行了python manage.py syncdb。我认为这在数据库中创建了一个表。然后我意识到我做了一个不正确的列,所以我更改了它,并运行了相同的命令,认为它会删除旧表,然后添加一个新表 然后我转到python manage.py shell,并尝试运行.objects.all(),但失败了,因为该列不存在Database 如何从DJango中的SQLite3删除表?,database,django,sqlite,Database,Django,Sqlite,我创建了一个模型,并运行了python manage.py syncdb。我认为这在数据库中创建了一个表。然后我意识到我做了一个不正确的列,所以我更改了它,并运行了相同的命令,认为它会删除旧表,然后添加一个新表 然后我转到python manage.py shell,并尝试运行.objects.all(),但失败了,因为该列不存在 我想清除旧表,然后再次运行syncdb,但我不知道如何执行该操作。使用 python manage.py sqlclear app\u name 然后试试看 pyth
我想清除旧表,然后再次运行syncdb,但我不知道如何执行该操作。使用
python manage.py sqlclear app\u name
然后试试看
python manage.py dbshell
并执行DROP语句
查看在使用Django 1.4或更低版本时,另一种简单的方法是
python manage.py reset app_name
删除并重新创建此应用程序模型使用的表
这在Django 1.3中被弃用,在Django 1.5中不再可用。清除应用程序只需编写:
./manage.py sqlclear app_name | ./manage.py dbshell
然后,为了重建表,只需键入:
./manage.py syncdb
没有一个答案显示了如何在一个应用程序中删除一个表。这不太难。该命令将用户记录到sqlite3 shell中
python manage.py dbshell
在shell中,键入以下命令以查看数据库的结构。这将显示数据库中的所有表名(以及表中的列名)
通常,Django根据以下约定命名表:“appname\u modelname”。因此,实现目标的SQL查询将类似于以下内容:
DROP TABLE appname_modelname;
DROP TABLE appname_tablename CASCADE;
这应该足够了,即使该表与其他表有关系。现在,您可以通过执行以下操作注销SQLITE shell:
.exit
如果再次运行syncdb,Django将根据您的模型重建表。这样,您就可以在不丢失所有应用程序数据的情况下更新数据库表。如果你经常遇到这个问题,考虑使用一个Dangango应用程序来迁移你的表。
我也遇到了同样的问题。 为了快速解决问题(如果您不在乎丢失表/数据),请使用所需的数据类型更正models.py文件,删除迁移文件夹和db.SQLite3文件
然后重新运行以下命令:在Django 1.9中,我必须执行Kat Russo的步骤,但是第二次迁移有点棘手。你必须跑
./manage.py migrate --run-syncdb
在Django 2.1.7中,我在中打开了
db.sqlite3
文件(上还有一个Python包),并使用命令删除了表
DROP TABLE appname_tablename;
然后
DELETE FROM django_migrations WHERE App='appname';
然后再跑
python manage.py makemigrations appname
python manage.py migrate appname
以下几个答案可能值得进一步探讨: 因此,您可以使用以下命令访问
dbshell
:
python manage.py dbshell
然后优先使用以下各项:
DROP TABLE appname_modelname;
DROP TABLE appname_tablename CASCADE;
要删除任何相关表,请有效地镜像字段上的“on_delete=CASCADE”方向。这是出于设计。同步改变和下降将打开一个巨大的蠕虫罐。乔治给了你一个正确的答案。这就是我使用的解决方案。工作正常。在Django 1.3中,reset命令已被弃用,在Django 1.5中不再可用。请检查我的答案。当前版本支持::python manage.py reset_dba这是我发现的答案。非常感谢。碰巧reset命令工作得很好。这里有更符合版本要求的基本原则。我只想补充一点,您需要安装sqlite3。非常感谢您提到
dbshell
——我以前使用过shell
,但在将我的DB换成mysql之后,它似乎不再允许我访问我的模型。dbshell
现在将我直接插入mysql shell——非常酷。根据Schdiewie Kay的回答:在完成上述所有步骤后,对Django 1.9+运行“manage.py migrate--run syncdb”而不是“syncdb”,这是我唯一可以使用的解决方案。谢谢这似乎是唯一有效的解决办法。高度低估的答案。是的,这真的很有帮助,thanx。但是当我删除迁移文件夹时,makemigrations
命令没有识别出我的模型。因此,我必须重新创建该文件夹并将\uuuu init\uuuuuu.py
放入其中,然后一切正常。@kat Russo如果不想删除数据怎么办?@NoMercy下次尝试“python manage.py makemigrations appname”最终获得了解决方案。ThanksNo不再适用于Django 1.9+:这很有帮助删除整个迁移文件夹使其起作用