Mais oui cher interlocuter du Web.
Créer un fichier “settings_test.py” à côté du fichier de settings, qui contient ça:
from settings import * DATABASES['default'] = { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', } |
Et lancer les commandes ./manage.py
avec --settings=settings_test
:
Par exemple :
./manage.py shell --settings=settings_test ./manage.py runserver --settings=settings_test |
Et voilà, toute manipulation va automatiquement sauvegarder les données en mémoire vive, et pas dans votre base de données initiale. Elles seront perdues à chaque redémarrage.
D’une manière générale, souvenez vous que vous pouvez faire autant de configurations alternatives et même dynamiques que vous le souhaitez avec les fichiers de settings : c’est juste du Python.
Si vous avez besoin des données de votre base de données initiale, vous pouvez faire une copie de la base de données et changer DATABASES
pour pointer sur cette copie. Du coup vous manipulerez votre copie, et pas la base de données initiale.
Enfin, on peut manipuler plusieurs bases de données en même temps en faisant plusieurs entrées dans DATABASES
(une ‘default’, une ‘test’, une ‘prod’, etc), par exemple :
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'postgres', 'PASSWORD': 'secret of mana' } 'test': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', } } |
On peut alors spécifier la base de données à utiliser, soit par paramètre de ./manage.py
(--database=bdd_a_utiliser
), soit directement dans le code de manipulation de l’ORM avec using
:
>>> Model.objects.all() # tape dans le BDD par défaut >>> Model.objects.using('test').all() # tape dans la bdd de test >>> mon_model.save(using='test') # sauvegarde dans la bdd de test |
Et ben ça décoiffe !!!
Heu, ouais on overide juste (on utilise une autre db, donc faut d’autres syncdb, etc), j’aurai plutôt espéré que seules les modifs de la base soient sauvegardés sur la 2nd base.
Using est ton ami.