Web2py:如何使用一条语句删除数据库中的所有表?

4
我想知道web2py是否提供了一种一次性删除所有表格的方法,而不必指定要删除的每个表格?
提前感谢!

你的数据库后端是什么? - ChristopheD
2个回答

5

db.tables() 返回数据库 db 中所有表的名称列表。

因此,您可以执行以下操作:

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

db.commit()
< p > < em >(如果Web2Py没有自动提交您的DAL更改,例如从命令行界面),则最后的db.commit()仅在必要时才需要。

在我的使用情况中,我需要在模式更改后重新填充我的数据库(使用db_wizard_populate.py)。为此,不需要使用drop(),而是使用truncate() - amit kumar

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

“不要重复自己”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接