Bagaimana mereset db di Django? Saya mendapatkan perintah 'reset' tidak ditemukan kesalahan

99

Mengikuti tutotrial Django by Example ini di sini: http://lightbird.net/dbe/todo_list.html

Tutorialnya mengatakan:

"Ini mengubah tata letak tabel kami dan kami harus meminta Django menyetel ulang dan membuat ulang tabel:

manage.py reset todo; manage.py syncdb"

meskipun, ketika saya menjalankan manage.py reset todo, saya mendapatkan kesalahan:

$ python manage.py reset todo                                       
- Unknown command: 'reset'

Apakah ini karena saya menggunakan sqlite3 dan bukan postgresql?

Adakah yang bisa memberi tahu saya apa perintah untuk mereset database?

Perintah: python manage.py sqlclear todomengembalikan kesalahan:

$ python manage.py sqlclear todo    
CommandError: App with label todo could not be found.    
Are you sure your INSTALLED_APPS setting is correct?

Jadi saya menambahkan 'rencana' ke INSTALLED_APPS saya di settings.py, dan menjalankan python manage.py sqlclear todolagi, menghasilkan kesalahan ini:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined
Prem
sumber
Kemungkinan duplikat dari Apa cara termudah untuk membersihkan database dari CLI dengan manage.py di Django?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Jawaban:

155

resettelah diganti flushdengan Django 1.5, lihat:

python manage.py help flush
robertklep
sumber
4
Sayangnya ini tidak bekerja pada aplikasi individu seperti yang dilakukan manage.py reset <appname>. Ini menghasilkan kesalahan: CommandError: Command tidak menerima argumen apa pun
Andre
5
Untungnya, seseorang
memindahkannya
terima kasih, baik untuk mengetahui, dokumentasi django publik terbaru (terakhir diubah 6 bulan yang lalu) tentang perlengkapan masih (2019-07-11) berbicara tentang 'reset': code.djangoproject.com/wiki/Fixtures
vchrizz
34

Sepertinya jawaban 'siram' akan berfungsi untuk beberapa, tetapi tidak semua kasus. Saya tidak hanya perlu mengosongkan nilai dalam database, tetapi juga membuat ulang tabel dengan benar. Saya belum menggunakan migrasi (hari-hari awal) jadi saya benar-benar perlu menghapus semua tabel.

Dua cara yang saya temukan untuk menjatuhkan semua tabel, keduanya membutuhkan sesuatu selain inti django.

Jika Anda menggunakan Heroku, jatuhkan semua tabel dengan pg: reset:

heroku pg:reset DATABASE_URL
heroku run python manage.py syncdb

Jika Anda dapat memasang Ekstensi Django, ini mempunyai cara untuk melakukan penyetelan ulang lengkap:

python ./manage.py reset_db --router=default
LisaD
sumber
6
@jonalv, Anda harus menginstal django-extensions terlebih dahulu.
edjroot
6
Juga, Anda harus memasukkannya di INSTALLED_APPSdalam settings.py.
Max Candocia
21

Mirip dengan jawaban LisaD, Django Extensions memiliki perintah reset_db hebat yang benar-benar menghapus semuanya, alih-alih hanya memotong tabel seperti yang dilakukan "flush".

python ./manage.py reset_db

Hanya membersihkan tabel tidak memperbaiki kesalahan terus-menerus yang terjadi saat saya menghapus objek. Melakukan reset_db memperbaiki masalah.

aendrew
sumber
1
Ini yang saya cari, tapi saya tidak perlu memberikan --routerargumen, mungkin itu opsional sekarang, lima tahun kemudian? :)
sialan
18

jika Anda menggunakan Django 2.0 Kemudian

python manage.py flush 

akan bekerja

Vaibhav Gupta
sumber
11

Jika Anda ingin membersihkan seluruh basis data, Anda dapat menggunakan: python manage.py flush Jika Anda ingin membersihkan tabel basis data dari aplikasi Django, Anda dapat menggunakan: python manage.py migrate appname zero

Abhijeet Padhy
sumber
9

Dengan django 1.11, cukup hapus semua file migrasi dari migrationsfolder setiap aplikasi (semua file kecuali __init__.py). Kemudian

  1. Jatuhkan database secara manual.
  2. Buat database secara manual.
  3. Lari python3 manage.py makemigrations.
  4. Lari python3 manage.py migrate.

Dan voilla, database Anda telah diatur ulang sepenuhnya.

Gursimran Singh
sumber
jika menggunakan sqlite, tidak perlu membuat database secara manual, python3 manage.py makemigrationsdan python3 manage.py migrateakan mengurusnya, setidaknya di django 2.0
toto_tico
4

Bagi saya ini memecahkan masalah.

heroku pg:reset DATABASE_URL

heroku run bash
>> Inside heroku bash
cd app_name && rm -rf migrations && cd ..
./manage.py makemigrations app_name
./manage.py migrate
yask
sumber
3

Ikuti saja jawaban @ LisaD .
Mulai 2016 ( Django 1.9), Anda perlu mengetik:

heroku pg:reset DATABASE_URL
heroku run python manage.py makemigrations
heroku run python manage.py migrate

Ini akan memberi Anda database baru yang segar dalam Heroku.

Jan
sumber
1
  1. Hapus database Anda secara manual. Pastikan Anda membuat cadangan terlebih dahulu (dalam kasus saya db.sqlite3 adalah database saya)

  2. Jalankan perintah ini manage.py migrate

bikram
sumber
1
python manage.py flush

menghapus konten db lama,

Jangan lupa untuk membuat superuser baru:

python manage.py createsuperuser
Thusitha Deepal
sumber