Je me demandais si web2py offrait un moyen de supprimer toutes les tables à la fois, sans avoir à spécifier chaque table à supprimer?web2py: supprimer toutes les tables d'une base de données dans une instruction?
Merci d'avance!
Je me demandais si web2py offrait un moyen de supprimer toutes les tables à la fois, sans avoir à spécifier chaque table à supprimer?web2py: supprimer toutes les tables d'une base de données dans une instruction?
Merci d'avance!
db.tables()
retourne une liste avec les noms de toutes les tables de la base de données db
Vous pouvez le faire:
for table_name in db.tables():
db[table_name].drop()
db.commit()
(La db.commit()
finale est nécessaire que si web2py ne commet pas votre DAL change automatiquement, par exemple à partir de l'interface de ligne de commande.)
Dans mon cas d'utilisation, j'avais besoin de re-remplir ma base de données (en utilisant db_wizard_populate.py) après les changements dans le schéma. Pour cela, il n'est pas nécessaire de 'drop()', mais 'truncate()'. –
La réponse précédente a un problème - si vous utilisez plus d'un d atabase, vous pourriez accidentellement déposer des tables de la mauvaise base de données si vous faites une erreur couper-coller. Exemple -
for table_name in db_one.tables():
db_two[table_name].drop()
Si vous copiez le code d'un modèle ou une application à une autre, il est trop facile de modifier une référence db et non l'autre. Si db_two a des tables dont les noms correspondent à certaines tables dans db_one, vous pouvez supprimer une table dans la mauvaise base de données. Mieux vaut écrire une fonction triviale qui prend db comme paramètre -
def dropdb(thedb):
for table_name in thedb.tables():
thedb[table_name].drop()
"Ne vous répétez pas".
Quel est le backend de votre base de données? – ChristopheD