web2py:在一个语句中删除数据库中的所有表?

时间:2011-01-08 14:22:30

标签: database web2py

我想知道web2py是否提供了一次删除所有表的方法,而不必指定要删除的每个表?

提前致谢!

2 个答案:

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

“不要重复自己”。