2011-01-08 1 views

Répondre

5

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.)

+0

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()'. –

0

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".

Questions connexes