2009-07-11 32 views
99

我可以只在一個模型上執行 Django而不是整個應用程序,如果是這樣,怎麼辦?Django傾倒單個模型的數據?

對於應用將是:

python manage.py dumpdata myapp 

不過,我想一些具體的模型,如「myapp.mymodel」轉儲。原因是,我有一些巨大的300萬條記錄加上同一個應用程序中的數據集,我不喜歡這些數據集。

+0

我覺得你的問題不容易理解。你想加載一個SQL轉儲到你的數據庫?或者你想做一些toString()和模型的實例? – 2009-07-11 06:42:16

回答

179

由於1.1版本和更高,Django的dumpdata管理命令可以轉儲從單個表中的數據:

./manage.py dumpdata myapp1 myapp2.my_model 

你也可以分開多個應用程序和命令行上的模型。以下是規範定義:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]] 
+18

django 1.3 ./manage.py dumpdata myapp.mymodel – gath 2011-05-17 09:52:08

5

我認爲你有你的問題的解決方案。你可以轉儲像這樣的個別型號:

./manage.py dumpdata myapp.my_model 
+0

我在發帖之前試過了。沒有運氣。我在Django 1.0中。還試過myapp.models.mymodel? – nategood 2009-07-11 07:09:28

+0

您需要使用trunk才能正常工作。 – priestc 2009-07-11 07:18:53

1

作爲解決方法,您可以製作另一個應用程序並複製模型,但使用db_table元選項將其指向現有表。然後,您可以將您複製的模型轉儲到新應用程序中。您現有的應用程序不會受到影響。

86

如上所述,您無法通過Django 1.0中的manage.py命令執行此操作。但是你可以使用腳本來導出JSON文件,並使用loaddata加載:

from django.core import serializers 
from myproject.myapp import models 
data = serializers.serialize("json", models.MyModel.objects.all()) 
out = open("mymodel.json", "w") 
out.write(data) 
out.close() 
0

我創建了一個管理命令的產生在每個模型基礎上的常客。 燈具可以通過運行產生:

./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json 

代碼爲:https://gist.github.com/2394883

3

對於成功,我說了兩遍,並指定型號的兩倍,如:

./manage.py dumpdata myapp2.my_model myapp2.my_model 

如果我只說

./manage.py dumpdata myapp2 myapp2.my_model 

我被所有的模型充斥在myapp2,儘管我指定了my_model。

2

將所有數據從django模型轉換爲json格式。

語法:

python manage.py dumpdata app_name.model_name 

對於例如傾銷從group_permission模型,其駐留在缺省auth應用在Django數據。

python manage.py dumpdata auth.group_permission 

對於輸出採取控制檯上看看。