我需要用一堆虛擬條目(大約200+)填充我的數據庫,以便測試我所做的管理界面,並且想知道是否有更好的方法去做吧。我昨天花了我一天中最好的時間試圖手工填充它(即通過將這樣的東西包裝成my_model(title =「asdfasdf」,field2 =「laksdj」...)在一堆「for x in range 0,200):「循環),並放棄,因爲它沒有按照我預期的方式工作。我認爲this是我需要使用的,但是您是否需要在數據庫中擁有(存在)數據才能運行?Django - 爲測試目的填充數據庫
回答
檢查這個程序
https://github.com/aerosol/django-dilla/
比方說,你寫博客應用程序(噢,你喜歡的!)在Django。單元測試進行得很好,並且所有的運行速度都非常快,甚至是ORM生成的超長查詢。你已經添加了幾個分類的帖子,它仍然是穩定的。您很確定該應用程序的效率很高,並且可以進行實時部署。對?錯誤。
這正是我一直在尋找的東西。謝謝一堆! – cornjuliox 2009-12-08 17:46:57
@Eeyore:你的回覆不會讓我睡覺。 – misterte 2013-02-28 18:14:54
您可以使用燈具來達到此目的,並使用loaddata管理命令。
一種方法就是這樣做。
準備您的測試數據庫。
使用dumpdata創建數據庫的JSON導出。
把它放在你應用程序的
fixtures
目錄下。編寫你的單元測試來加載這個「fixture」。
我只需要添加一些細節。 – 2009-12-07 02:57:59
我不知道爲什麼你需要任何序列化。只要您將Django settings.py文件設置爲指向您的測試數據庫,填充測試數據庫應該只是保存模型。
for x in range(0, 200):
m = my_model(title=random_title(), field2=random_string(), ...)
m.save()
有更好的方法來做到這一點,但如果你想快速測試儀,這是要走的路。
而你正在shell的環境中運行,對吧? 'python manage.py shell' – hughdbrown 2009-12-07 03:42:44
Django fixtures提供了一種在syncdb
上導入數據的機制。但是,通過Python代碼來執行初始數據傳播通常更容易。您概述的技術應該可以工作,通過syncdb或管理命令。例如,通過執行syncdb,在my_app/management.py
:
def init_data(sender, **kwargs):
for i in range(1000):
MyModel(number=i).save()
signals.post_syncdb.connect(init_data)
或者,在management command在myapp/management/commands/my_command.py
:
from django.core.management.base import BaseCommand, CommandError
from models import MyModel
class MyCommand(BaseCommand):
def handle(self, *args, **options):
if len(args) > 0:
raise CommandError('need exactly zero arguments')
for i in range(1000):
MyModel(number=i).save()
然後,您可以將此數據導出到一個固定設備或繼續使用管理命令導入。如果您選擇繼續使用syncdb
信號,則需要有條件地運行init_data
函數以防止在隨後的syncdb
調用中導入數據。當一個燈具不夠用時,我個人喜歡這樣做:創建一個管理命令來導入數據,但是第一個syncdb
調用會自動執行導入。這樣,部署更加自動化,但我仍然可以輕鬆地修改初始數據並重新運行導入。
被接受的答案推薦的應用程序不再被維持然而Django的種子可以被用作替換:
我會建議django-autofixtures給你。我嘗試了django_seed和django-autofixtures,但是django_seed在使用唯一鍵方面存在很多問題。 django-autofixtures在填充數據庫時負責獨特的主要和其他數據庫約束條件
- 1. 自動數據庫填充:ORM,性能,...測試目的
- 2. 使用測試數據填充內存數據庫的模式
- 3. 用於測試目的將數據預填充到數據庫中
- 4. jgster將測試數據填充到生產數據庫中
- 5. Rails - 使用開發數據填充測試數據庫
- 6. Django ChoiceField從數據庫值填充
- 7. 不能填充測試的Postgres數據庫軌控制檯
- 8. 填充了MYSQL數據庫項目
- 9. 從目錄填充數據庫
- 10. 用數據庫條目填充ExpendableListView
- 11. 如何在Android中填充測試數據庫?
- 12. 填充與數據庫中的數據Django的形式鑑於
- 13. 使用Django預填充SQLite核心數據的數據庫
- 14. sqlite嘗試訪問ios時,預填充的數據庫爲空
- 15. 將測試數據庫重建爲生產測試數據庫
- 16. Treeview從數據庫填充
- 17. 填充標籤數據庫
- 18. 填充從數據庫
- 19. Android預填充數據庫
- 20. 填充從數據庫
- 21. 從數據庫填充DropDownList
- 22. 填充mysql數據庫
- 23. 如何填充數據庫?
- 24. 如何測試django數據庫模式?
- 25. Django測試異步數據庫寫入
- 26. django單元測試多個數據庫
- 27. 如何爲單元測試填充HttpWebResponse.GetResponseAsync()?
- 28. 爲java測試填充mongo集合
- 29. 創建測試數據庫Django的單元測試
- 30. Django的測試 - 無法刪除並重新測試數據庫
您不想序列化。你想通過在shell中運行來創建初始數據,保存實例,然後使用loaddata將數據庫導出爲像json這樣的格式:'python manage.py dumpdata --format = json --indent = 4 appname' @Matthew Schinckel在這方面是最接近的。 – hughdbrown 2009-12-07 03:48:57