我想知道web2py是否提供了一次删除所有表的方法,而不必指定要删除的每个表?
提前致谢!
答案 0 :(得分:5)
db.tables()
返回一个列表,其中包含数据库db
所以你可以这样做:
for table_name in db.tables():
db[table_name].drop()
db.commit()
(仅当Web2Py未自动提交DAL更改时才需要最终db.commit()
,例如从命令行界面。)
答案 1 :(得分:0)
上一个答案有一个问题 - 如果您使用多个数据库,如果出现剪切和粘贴错误,可能会意外地从错误的数据库中删除表。示例 -
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()
“不要重复自己”。