web-dev-qa-db-fra.com

La table a été supprimée, comment puis-je la faire recréer par Django?

Il existe deux modèles de groupes, les étudiants et un seul tableau pour les groupes, le tableau des étudiants a été supprimé.

Comment modifier Django le créer à nouveau? Si je fais makemigrations, il affiche "Aucun changement détecté".

Sur la page d'administration, lorsque je clique sur la table des étudiants, une exception est générée:

relation "students_students" does not exist

Je viens de supprimer mon dossier de migration, de supprimer l'ensemble de la base de données, puis de migrer pour l'application

python3 manage.py makemigration 
python3 manage.py migrate

et il est revenu.

0
Andrews Opoku

Dans Django 1.7, vous pouvez essayer:

1. Delete your migrations folder

2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
   You could alternatively just truncate this table.

3. python manage.py makemigrations

4. python manage.py migrate --fake

Si vous travaillez dans Django 1.9.5 c'est la solution à 100% pour résoudre ce problème:

1. Delete your migrations folder

2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
   You could alternatively just truncate this table.

3. python manage.py makemigrations app_name

4. python manage.py migrate

Cela fonctionne à 100% pour moi!

20
Raúl EL

Il n’existe pas de moyen facile de demander à Django de recréer une table que vous avez supprimée manuellement. Une fois que votre base de données est modifiée manuellement, la vue de Django sur la base de données (issue des migrations) est différente de la réalité et il peut être difficile à corriger.

Si vous exécutez la commande sqlmigrate , elle vous indiquera le code SQL requis pour créer la table. Vous pouvez exécuter le SQL dans un shell de base de données. En supposant que le nom de votre application est students et que la migration qui a créé la table était 00XX_create_students.py, vous feriez:

./manage.py sqlmigrate students 00XX_create_students

Faites attention s'il y a des clés étrangères en provenance ou à destination de la table des étudiants, les contraintes devront également être créées.

8
Alasdair

Pour Django 2, procédez comme suit:

 1. Delete your migrations folder

 2. In the database: `DELETE FROM Django_migrations WHERE app = 'app_name';`

 3. python manage.py makemigrations app_name

 4. python manage.py migrate

 5. python manage.py migrate --fake default   //This was the key to solve my problem
6
Alex Jolig

Renommez le nom de la table supprimée en nom_nouveau_nom dans le fichier models.py et exécutez:

python3 manage.py makemigration
python3 manage.py migrate

renommez à nouveau la table nom_nouveau_nom au nom original et exécutez

python3 manage.py makemigration
python3 manage.py migrate

enfin, allez dans le dbshell et déposez la table some_new_name

0
Programming-Lover

Pour Django 1.10.4, j'ai supprimé le fichier db.sqlite3 du dossier du projet, puis j'ai exécuté les commandes suivantes:

  1. python manage.py makemigrations nom_app
  2. python manage.py migrer
0
siddharth

Django 1.11.2 utilisant MariaDB, suppression accidentelle d'une table de base de données. Pour recréer la table, essayez ce qui suit: 1/Supprimez tout sauf le répertoire init . Py dans votre répertoire app/migrations 2/select * from Django_migrations; supprimer de Django_migrations où app = 'yourapp'; 3/Vérifiez que votre modèle est bon et exécutez: python manage.py makemigrations 4/python manage.py migrate

Travaille pour moi!

0
user2519486

Je crée la table manuellement et ça aide.