2010-08-25 77 views
1

憑什麼命令我可以從一個特定的應用程序/只有一個表的Django的數據庫中刪除表? 我確實找到了各種各樣的東西,但並不知道如何擺脫桌子。Django的數據庫表中刪除

而且雖然我在這。

我創建模型和命中執行syncdb,然後我有表。 如果我想更新/添加到這些表中,是否遇到問題?

回答

4

您最好的選擇是讓安裝在你的機器Django的南部。

如果你正在使用PIP,做pip install django-south

這可以讓你太向前和向後遷移數據。

這是非常方便的,特別是如果你需要更新表,新表等

檢查出來。

南部增加應用程序是那麼容易,因爲python manage.py schemamigration appname --initial

製作模型中的更改並運行以下python manage.py schemamigration appname --auto

一旦你的數據遷移文件被創建,它會告訴你數據現在已準備好遷移。

只需使用python manage.py migrate appname

http://south.aeracode.org/docs/about.html

希望這有助於

+0

很酷。謝謝!聽說過。 PIP是內置還是必須得到? – MacPython 2010-08-25 08:04:53

+0

點不標準,但易於安裝。 運行在終端下,easy_install的點子 – ApPeL 2010-08-25 08:15:35

+0

如果不是過分的要求,可能你也許給予好評以及。 – ApPeL 2010-08-25 08:27:25

0

如果要刪除的表,這是在您試圖刪除特定應用程序的模型文件來完成,對於這個沒有命令,你只要進入該文件並刪除它,然後重新運行syncdb,對於你的其他問題,答案是一樣的。每個應用程序文件夾都應該有一個名爲「models.py」的文件,這裏是模型,在這種情況下,相當於指定的表格,以及它們的字段,您只需編輯此項即可進行任何更改。

+0

阿佩爾的回答給了我,爲什麼你可能會做這樣一個新的視角,我猜你正在嘗試同步現有的數據庫與Django的安裝?無論如何,一旦你在Django的安裝中工作,你應該總是通過Django創建新的模型/表,因爲它會爲你做這件事(自動創建數據庫表),但是我認爲它在刪除模型時不會刪除表?如果是這樣,ApPel的解決方案將是正確的,因爲它只需要一個腳本進入你的數據庫同步它 – Rick 2010-08-25 07:59:49

+1

我可以準確地告訴你爲什麼我這樣做。我只在django工作。我正試圖讓一個相當複雜的數據庫去。所以現在我正在嘗試不同的變化。爲了避免我想刪除一個混亂的數據庫。也。我想知道,如果稍後當我啓動並運行時,我想刪除特定的表格,我想知道這是否可能以及如何。 – MacPython 2010-08-25 08:07:44

0
def reset(): 
    import install 
    from django.db.models import get_models 
    removed_tables = [] 
    exceptions = [] 
    for model in get_models(): 
     if model.__name__ not in ('User','Session','Group','Permission'): 
      try: 
       model.objects.all().delete() # So we can remove the table without complaints from the database server. 
       CURSOR.execute('DROP TABLE %s' % model._meta.db_table) 
       print "Dropped table %s from model %s" % (model._meta.db_table, model.__name__) 
      except Exception as e: 
       exceptions.append([model._meta.db_table, str(e)]) 
       continue 
      removed_tables.append(model._meta.db_table) 
    print "Removed %s tables" % len(removed_tables) 
    syncdb() 
    install.install() # A function that leads to the creation of my default data