Django'da db nasıl sıfırlanır? Bir 'sıfırlama' komutu alıyorum, bulunamadı hatası


102

Bu Django'nun ardından Örnek tutotrial burada: http://lightbird.net/dbe/todo_list.html

Öğretici şunu söylüyor:

"Bu, tablo düzenimizi değiştirir ve Django'dan tabloları sıfırlamasını ve yeniden oluşturmasını istememiz gerekecek:

manage.py reset todo; manage.py syncdb"

yine de çalıştırdığımda manage.py reset todoşu hatayı alıyorum:

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

Bunun nedeni postgresql değil sqlite3 kullanmam mı?

Biri bana veritabanını sıfırlama komutunun ne olduğunu söyleyebilir mi?

Komut: python manage.py sqlclear todohatayı döndürür:

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

Bu yüzden, settings.py'deki INSTALLED_APPS'ıma 'yapılacak işi' ekledim ve python manage.py sqlclear todotekrar çalıştırarak şu hatayla sonuçlandı:

$ python manage.py sqlclear todo                                      
- NameError: name 'admin' is not defined

Yanıtlar:


155

resetflushDjango 1.5 ile değiştirildi , bakınız:

python manage.py help flush

4
Maalesef bu, manage.py <uygulama adı> sıfırlama gibi tek tek uygulamalarda çalışmaz. Bir hatayla sonuçlanır: CommandError: Komut herhangi bir argümanı kabul etmiyor
Andre

5
Neyse ki, birisi onu 1.5'e geri taşıdı :)
robertklep

teşekkürler, bilmekte fayda var, en son (en son 6 ay önce değiştirildi) armatürlerle ilgili genel django belgeleri hala (2019-07-11) 'sıfırlama' hakkında konuşuyor: code.djangoproject.com/wiki/Fixtures
vchrizz

34

Görünüşe göre 'floş' cevabı bazıları için işe yarayacak, ancak her durumda değil. Sadece veritabanındaki değerleri temizlemeye değil, tabloları düzgün şekilde yeniden oluşturmaya ihtiyacım vardı. Henüz geçişleri kullanmıyorum (ilk günler), bu yüzden gerçekten tüm tabloları bırakmam gerekiyordu.

Tüm tabloları düşürmek için bulduğum iki yol, her ikisi de çekirdek django dışında bir şey gerektirir.

Heroku'daysanız, tüm tabloları pg: reset ile bırakın:

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

Django Extensions'ı kurabilirseniz, tam bir sıfırlama yapmanın bir yolu vardır:

python ./manage.py reset_db --router=default

6
@jonalv, önce django uzantılarını yüklemelisiniz .
edjroot

6
Ayrıca, bu altında yer olması gerekir INSTALLED_APPSde settings.py.
Max Candocia

21

LisaD'nin cevabına benzer şekilde, Django Extensions , "flush" gibi tabloları kısaltmak yerine her şeyi tamamen bırakan harika bir reset_db komutuna sahiptir.

python ./manage.py reset_db

Sadece tabloları temizlemek, nesneleri silerken meydana gelen kalıcı bir hatayı düzeltmiyordu. Reset_db yapmak sorunu çözdü.


1
Aradığım buydu, ama bir --routerargüman sunmak zorunda değildim , belki şimdi isteğe bağlı, beş yıl sonra? :)
damd


12

Tüm veritabanını temizlemek istiyorsanız şunu kullanabilirsiniz: python manage.py flush Bir Django uygulamasının veritabanı tablosunu temizlemek istiyorsanız, şunu kullanabilirsiniz: python manage.py migrate appname zero


11

Django 1.11 ile, migrationsher uygulamanın klasöründeki tüm geçiş dosyalarını silin (hariç tüm dosyalar __init__.py). Sonra

  1. Veritabanını manuel olarak bırakın.
  2. El ile veritabanı oluşturun.
  3. Çalıştır python3 manage.py makemigrations.
  4. Çalıştır python3 manage.py migrate.

Ve voilla, veritabanınız tamamen sıfırlandı.


sqlite kullanıyorsanız, veritabanını manuel olarak oluşturmaya gerek yok python3 manage.py makemigrationsve python3 manage.py migratebununla ilgilenecek, en azından django 2.0'da
toto_tico

4

Benim için bu sorunu çözdü.

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

3

Sadece bir karşı takip LisaD en @ cevap.
2016 itibariyle ( Django 1.9), yazmanız gerekir:

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

Bu size Heroku'da yepyeni bir veritabanı verecektir.


2
python manage.py flush

eski db içerikleri silindi,

Yeni süper kullanıcı oluşturmayı unutmayın:

python manage.py createsuperuser

1
  1. Veritabanınızı manuel olarak silin. Önce yedekleme oluşturduğunuzdan emin olun (benim durumumda db.sqlite3 benim veritabanımdır)

  2. Bu komutu çalıştırın manage.py migrate

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.