2011-01-08 71 views

回答

5

db.tables()將返回所有表的數據庫名稱的列表db

所以,你可以這樣做:

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

db.commit() 

(最終db.commit()只是必要的,如果web2py中沒有提交你的DAL例如從命令行界面自動更改。)

+0

在我的用例中,我需要在模式更改後重新填充數據庫(使用db_wizard_populate.py)。爲此,不需要「drop()」,而是「truncate()」。 – 2011-06-06 03:53:50

0

上一個答案有一個問題 - 如果您使用多個d atabase,如果您發生剪切粘貼錯誤,您可能會意外地從錯誤的數據庫中刪除表。示例 -

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

如果從一個模型或應用程序複製到另一個代碼,實在是太容易編輯一個dB參考,而不是其他。如果db_two具有名稱與db_one中的某些表匹配的表,則可以在錯誤的數據庫中刪除表。最好寫一個以db爲參數的簡單函數 -

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

「不要重複你自己」。

相關問題