2011-09-27 55 views

回答

1

要運行的web2py

db.executesql('ALTER TABLE old_name RENAME TO new_name;') 

這雖然不會改變你的代碼更改數據庫的模式!只有你可以改變你的代碼。

所以,如果你只是這樣做了一次,比如說你有一個醜陋或不明確的表名並且想要重構你的代碼,那麼最好不要使用web2py來更改數據庫模式中的表名。這是我會怎麼做的。

  • 停止應用

  • 使用sqlite3的控制檯程序重命名錶中的DB模式,或任何數據庫管理程序使用來代替。我想這可能是你真正的問題,因爲你習慣於使用web2py作爲你的數據庫管理程序。那麼,我想你將不得不學習如何使用sqlite3控制檯控制檯程序。

  • 變化模型

  • 重新啓動應用程序的代碼。

但是,如果你真的堅持使用的web2py只管理數據庫,那麼這樣的事情應該工作:

  • 創建一個新的控制器,說「table_rename」添加行

    db.executesql( 'ALTER TABLE OLD_NAME重命名爲NEW_NAME;')

到控制器

  • 眉毛應用/ table_rename

  • 停止應用

  • 更改模型代碼

  • 刪除table_rename

  • 重新啓動應用程序。

+0

但模型會知道這個嗎?或者我必須單獨更換模型? models.py文件仍然會有一個define_table('old_name'...)。我該先做些什麼? – User

+0

SQL將更改數據庫架構。它不會改變你的代碼!只有你可以改變你的代碼。 – ravenspoint

+0

web2py保留有關sql的元數據..你的答案是否解釋了這個問題?當然,我知道我可以進入數據庫任意重命名的東西..但我想以一種猶太教的方式做到這一點,以便web2py不會混淆和/或損壞。 – User