Мне было интересно, если web2py предлагает любой способ сразу удалить все таблицы, не указывая каждую таблицу, которую нужно удалить?web2py: удалить все таблицы в базе данных в одном выражении?
Заранее благодарен!
Мне было интересно, если web2py предлагает любой способ сразу удалить все таблицы, не указывая каждую таблицу, которую нужно удалить?web2py: удалить все таблицы в базе данных в одном выражении?
Заранее благодарен!
db.tables()
возвращает список с именами всех таблиц в базе данных db
Так что вы можете сделать:
for table_name in db.tables():
db[table_name].drop()
db.commit()
(Окончательный db.commit()
необходим, только если web2py не совершает свой DAL автоматически изменяется, например, из интерфейса командной строки.)
В моем случае использования мне нужно было повторно заполнить мою базу данных (используя db_wizard_populate.py) после изменений в схеме. Для этого не нужно 'drop()', а 'truncate()'. –
В предыдущем ответе есть одна проблема - если вы используете более одного 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()
«Не повторяйте себя».
Какое качество вы используете? – ChristopheD