web2py: удалить все таблицы в базе данных одним оператором? - PullRequest
4 голосов
/ 08 января 2011

Мне было интересно, если web2py предлагает какой-либо способ отбросить все таблицы сразу, без указания каждой таблицы, которую нужно удалить?

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 09 января 2011

db.tables() возвращает список с именами всех таблиц в базе данных db

Так что вы можете сделать:

for table_name in db.tables():
    db[table_name].drop()

db.commit()

(Финал db.commit()необходим только в том случае, если Web2Py не передает изменения DAL автоматически, например, из интерфейса командной строки.)

0 голосов
/ 18 января 2012

В предыдущем ответе есть одна проблема - если вы используете более одной базы данных, вы можете случайно удалить таблицы из неправильной БД, если допустите ошибку вырезания и вставки.Пример -

for table_name in db_one.tables():
    db_two[table_name].drop()

Если вы копируете код из одной модели или приложения в другую, слишком просто отредактировать одну ссылку на БД, а другую нет.Если в db_two есть таблицы с именами, совпадающими с некоторыми таблицами в db_one, вы можете удалить таблицу из неверной базы данных.Лучше написать тривиальную функцию, которая принимает в качестве параметра db -

def dropdb(thedb):
    for table_name in thedb.tables():
        thedb[table_name].drop()

"Не повторяйся".

...