Care este cel mai simplu mod de a șterge o bază de date din CLI cu manage.py în Django? (Programare, Python, Mysql, Django, Django 1.3)

Mirage a intrebat.

Folosesc Django pentru a construi un site web cu MySQL. Acum, pe măsură ce învăț, așa că trebuie să schimb modelul foarte des, așa că vreau ca toate tabelele să fie șterse și să se creeze o nouă tabelă.

Dar syncdb nu se atinge de tabelele existente. Există vreo modalitate mai bună de a rezolva această problemă?

5 răspunsuri
manojlds

Dacă nu vă pasă de date:

Cel mai bun mod ar fi să renunțați la baza de date și să rulați syncdb din nou. Sau puteți rula:

For Django >= 1.5

python manage.py flush

For Django < 1.5

python manage.py reset appname

(puteți adăuga --no-input la sfârșitul comenzii pentru ca aceasta să sară peste promptul interactiv).

Dacă vă pasă de date:

Din documentație:

syncdb va crea tabele doar pentru modelele care nu au fost încă instalate. Nu va emite niciodată instrucțiuni ALTER TABLE pentru a se potrivi cu modificările aduse unei clase de model după instalare. Modificările aduse claselor de modele și schemelor bazelor de date implică adesea o anumită formă de ambiguitate și, în aceste cazuri, Django ar trebui să ghicească modificările corecte care trebuie făcute. Există riscul ca datele critice să fie pierdute în acest proces.

Dacă ați efectuat modificări la un model și doriți să modificați tabelele bazei de date pentru a le adapta, utilizați comanda sql pentru a afișa noua structură SQL și comparați-o cu schema de tabele existentă pentru a calcula modificările.

https://docs.djangoproject.com/en/dev/ref/django-admin/

Referință: ÎNTREBĂRI FRECVENTE – https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database

Oamenii recomandă, de asemenea, South ( http://south.aeracode.org/docs/about.html#key-features ), dar eu nu l-am încercat.

Comentarii

  • South este foarte, foarte bun pentru gestionarea automată a migrărilor. Este nevoie de un pic de obișnuință, dar economisește o mulțime de bătăi de cap cu eliminarea și recrearea bazelor de date în timpul dezvoltării, și este o necesitate odată ce site-ul dvs. este live și trebuie să modificați structura bazei de date în timp ce aveți date prețioase în ea. –  > Por thepeer.
  • COMANDA RESET A FOST DEPRECIATĂ. În Django 1.5 comanda a fost actualizată în flush. încercați să utilizați python manage.py flush sau python manage.py flush --noinput pentru a sări peste promptul interactiv. –  > Por agconti.
  • South a fost eliminat. Consultați aici. Iar linkul pe care l-ați dat aici este stricat. –  > Por Mukesh Sai Kumar.
  • Se pare că comanda este acum django-admin flush în conformitate cu docs –  > Por Todd.
mrmagooey

Folosind Extensiile Django, care rulează:

./manage.py reset_db

Va șterge tabelele din baza de date, apoi rulează:

./manage.py syncdb

Le va recrea (este posibil ca south să vă ceară să migrați lucrurile).

Comentarii

  • @becko executați mai întâi acest lucru : pip install django-extensions –  > Por FacePalm.
Anupam

Cred că Django docs menționează în mod explicit că, dacă intenția este de a porni din nou de la o bază de date goală (ceea ce pare a fi intenția lui OP), atunci trebuie doar să renunți și să recreezi baza de date și să rulezi din nou migrate (în loc să folosiți flush):

Dacă preferați să porniți de la o bază de date goală și să rulați din nou toate migrările, ar trebui să renunțați și să recreați baza de date și apoi să rulați migrare.

Deci, pentru cazul lui OP, trebuie doar să:

  1. Să eliminăm baza de date din MySQL
  2. Să recreăm baza de date
  3. Rulați python manage.py migrate

Udi

Cel mai rapid (scade și creează toate tabelele, inclusiv datele):

./manage.py reset appname | ./manage.py dbshell

Atenție:

  • S-ar putea să nu funcționeze corect pe Windows.
  • S-ar putea păstra unele tabele vechi în baza de date

Comentarii

  • reset rulează deja SQL, deci nu este nevoie să se facă pipe la dbshell. Dacă utilizați sqlreset comanda, atunci aceasta ar tipări doar SQL, pe care l-ați putea transmite în shell pentru execuție, dar este un pas inutil. –  > Por Michael Mior.
Mahbub Ul Islam

Puteți utiliza biblioteca Django-Truncate pentru a șterge toate datele unui tabel fără a distruge structura tabelului.

Exemplu:

  1. În primul rând, instalați django-turncate folosind terminalul/linia de comandă:
pip install django-truncate
  1. Adăugați „django_truncate” la INSTALLED_APPS în fișierul settings.py fișier:
INSTALLED_APPS = [
    ...
    'django_truncate',
]
  1. Folosiți această comandă în terminalul dvs. pentru a șterge toate datele tabelului din aplicație.
python manage.py truncate --apps app_name --models table_name