2011-01-08 3 views

ответ

5

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

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

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

db.commit() 

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

+0

В моем случае использования мне нужно было повторно заполнить мою базу данных (используя db_wizard_populate.py) после изменений в схеме. Для этого не нужно 'drop()', а 'truncate()'. –

0

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

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

«Не повторяйте себя».

Смежные вопросы