web-dev-qa-db-ja.com

DJangoでSQLite3からテーブルを削除するにはどうすればよいですか?

モデルを作成し、実行しましたpython manage.py syncdb。dbにテーブルを作成したと思います。その後、列を誤って作成したことに気づいたので、変更して実行同じコマンドで、古いテーブルを削除し、新しいテーブルを追加すると考えています。

次に、python manage.py Shell)に移動し、.objects.all()を実行しようとしましたが、失敗し、列が存在しないと言いました。

古いテーブルをクリアしてから、syncdbを再度実行したいのですが、その方法がわかりません。

49
Alex

Django 1.4以下を使用しながらこれを行う別の簡単な方法は、

python manage.py reset app_name

このアプリのモデルで使用されるテーブルを削除して再作成します。

これはDjango 1.3で廃止され、Django 1.5

38
Ofri Raviv

アプリケーションをクリアするには、書くのと同じくらい簡単です。

./manage.py sqlclear app_name | ./manage.py dbshell 

テーブルを再構築するには、次のように入力します。

./manage.py syncdb
69
Adrián Deccico

答えはどれも、アプリでテーブルを1つだけ削除する方法を示していません。難しくありません。 dbshell コマンドは、ユーザーをsqlite3シェルにログインさせます。

python manage.py dbshell

シェルを開いているときに、次のコマンドを入力してデータベースの構造を確認します。これにより、データベース内のすべてのテーブル名(およびテーブル内の列名)も表示されます。

SELECT * FROM sqlite_master WHERE type='table';

一般に、Djangoは次の規則に従ってテーブルに名前を付けます: "appname_modelname"。したがって、目標を達成するSQLクエリは次のようになります。

DROP TABLE appname_modelname;

テーブルに他のテーブルとのリレーションシップがある場合でも、これで十分です。次のコマンドを実行して、SQLITEシェルからログアウトできます。

.exit

Syncdbを再度実行すると、Djangoはモデルに応じてテーブルを再構築します。この方法では、アプリのデータをすべて失うことなくデータベーステーブルを更新できます。多くの場合、Southの使用を検討してください-テーブルを移行するDjangoアプリ。

37
iamio

dROPステートメントを取得します

python manage.py sqlclear app_name

してみて

python manage.py dbshell

dROPステートメントを実行します

チェックアウト http://docs.djangoproject.com/en/dev/ref/Django-admin/

25
George Godik

同じ問題がありました。

迅速な解決のために(テーブル/データの消失を気にしない場合)、希望するデータ型でmodels.pyファイルを修正し、Migrationフォルダとdb.SQLite3ファイルを削除し、

その後、次のコマンドを再実行します。

  1. python manage.py migrate
  2. python manage.py makemigrations
  3. python manage.py migrate
  4. python manage.py createsuperuser(管理ページを管理する管理ユーザー/ pswdを作成するため)
  5. python manage.py runserver
18
Kat Russo

In Django 1.9私はKat Russoの手順を実行しなければなりませんでしたが、2番目の移行は少し注意が必要でした。実行する必要があります

./manage.py migrate --run-syncdb
1
Schdiewie Kay

Django 2.1.7では、db.sqlite3 file in SQLite browser (Python on Pypi )もあり、コマンドを使用してテーブルを削除しました)

DROP TABLE appname_tablename;

その後

DELETE FROM Django_migrations WHERE App='appname';

その後、再度実行します

python manage.py makemigrations appname
python manage.py migrate appname
0
Premysl Vorac