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

发布于 10-10 20:31 字数 64 浏览 6 评论 0原文

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

提前致谢!

I was wondering if web2py offers any way to drop all tables at once, without having to specify each table to be deleted?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲娇萝莉攻2024-10-17 20:31:00

db.tables() 返回一个列表,其中包含数据库中所有表的名称 db

所以你可以这样做:

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

db.commit()

(最后的 db.commit( ) 仅当 Web2Py 没有自动提交 DAL 更改时才需要,例如从命令行界面。)

db.tables() returns a list with the names of all tables in the database db

So you can do:

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

db.commit()

(The final db.commit() is only necessary if Web2Py isn't committing your DAL changes automatically, for example from the command line interface.)

清旖2024-10-17 20:31:00

上一个答案有一个问题——如果您使用多个数据库,如果您犯了剪切和粘贴错误,您可能会意外地从错误的数据库中删除表。示例 -

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

“不要重复自己”。

The previous answer has one problem -- if you are using more than one database, you could accidentally drop tables from the wrong DB if you make a cut-and-paste error. Example --

for table_name in db_one.tables():
    db_two[table_name].drop()

If you copy code from one model or app to another, it is too easy to edit one db reference and not the other. If db_two has tables with names matching some tables in db_one, you could drop a table in the wrong database. Better to write a trivial function that takes db as a parameter --

def dropdb(thedb):
    for table_name in thedb.tables():
        thedb[table_name].drop()

"Don't repeat yourself".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文