Tôi cần phải nhập dữ liệu của tôi với một loạt các mục giả (khoảng 200+) để tôi có thể kiểm tra giao diện quản trị tôi đã thực hiện và tôi đã tự hỏi nếu có một cách tốt hơn để làm điều đó. Tôi đã dành phần tốt hơn trong ngày hôm qua cố gắng điền vào bằng tay (tức là bằng cách gói những thứ như thế này my_model (tiêu đề = "asdfasdf", field2 = "laksdj" ...) trong một loạt "cho x trong phạm vi (0,200): "vòng lặp" và đã từ bỏ vì nó không hoạt động theo cách tôi mong đợi. Tôi nghĩ rằng this là những gì tôi cần phải sử dụng, nhưng bạn không cần phải có (hiện có) dữ liệu trong cơ sở dữ liệu để làm việc này?Django - Populating một cơ sở dữ liệu cho các mục đích thử nghiệm
Trả lời
Kiểm tra ứng dụng này
https://github.com/aerosol/django-dilla/
Hãy nói rằng bạn đã viết ứng dụng blog của bạn (oh yeah, yêu thích của bạn!) Trong Django. Các bài kiểm tra đơn vị diễn ra tốt đẹp và mọi thứ chạy cực nhanh, ngay cả những truy vấn siêu dài do ORM tạo ra. Bạn đã thêm một số bài đăng được phân loại và nó vẫn ổn định như một tảng đá. Bạn hoàn toàn chắc chắn rằng ứng dụng này hiệu quả và sẵn sàng để triển khai trực tiếp. Đúng? Sai rồi.
Đây chính xác là thứ tôi đang tìm kiếm. Cảm ơn nhiều! – cornjuliox
@Eeyore: câu trả lời của bạn sẽ không cho phép tôi ngủ. – misterte
Bạn có thể sử dụng đồ đạc cho mục đích này và lệnh quản lý loaddata.
Một cách tiếp cận là làm như thế này.
Chuẩn bị cơ sở dữ liệu thử nghiệm của bạn.
Sử dụng dumpdata để tạo JSON xuất cơ sở dữ liệu.
Đặt mã này vào thư mục
fixtures
của đơn đăng ký của bạn.Viết thử nghiệm đơn vị của bạn để tải "vật cố định" này.
Tôi chỉ cần thêm một số chi tiết. –
Tôi không chắc chắn lý do bạn yêu cầu bất kỳ sự tuần tự hóa nào. Miễn là bạn đã thiết lập tập tin settings.py Django của bạn để trỏ đến cơ sở dữ liệu thử nghiệm của bạn, populating một cơ sở dữ liệu thử nghiệm nên không có gì hơn là tiết kiệm mô hình.
for x in range(0, 200):
m = my_model(title=random_title(), field2=random_string(), ...)
m.save()
Có nhiều cách tốt hơn để thực hiện việc này, nhưng nếu bạn muốn thử nghiệm nhanh, đây là cách để thực hiện.
Và bạn đang chạy trong bối cảnh của vỏ, phải không? 'python manage.py shell' – hughdbrown
Django fixtures cung cấp cơ chế nhập dữ liệu trên syncdb
. Tuy nhiên, việc thực hiện việc truyền dữ liệu ban đầu này thường dễ dàng hơn thông qua mã Python. Kỹ thuật bạn phác thảo sẽ hoạt động, thông qua lệnh syncdb hoặc lệnh quản lý. Ví dụ, thông qua syncdb, trong my_app/management.py
:
def init_data(sender, **kwargs):
for i in range(1000):
MyModel(number=i).save()
signals.post_syncdb.connect(init_data)
Hoặc, trong một management command trong 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()
Sau đó bạn có thể xuất dữ liệu này cho một fixture, hoặc tiếp tục nhập khẩu bằng cách sử dụng lệnh quản lý. Nếu bạn chọn tiếp tục sử dụng tín hiệu syncdb
, bạn sẽ muốn chạy có điều kiện chức năng init_data
để ngăn dữ liệu được nhập vào các cuộc gọi syncdb
tiếp theo. Khi một trận đấu không đủ, cá nhân tôi muốn làm cả hai: tạo ra một lệnh quản lý để nhập dữ liệu, nhưng có lời gọi syncdb
đầu tiên thực hiện việc nhập tự động. Bằng cách đó, triển khai tự động hơn nhưng tôi vẫn có thể dễ dàng thực hiện các sửa đổi đối với dữ liệu ban đầu và chạy lại quá trình nhập.
Ứng dụng được đề xuất bởi câu trả lời được chấp nhận là không còn được duy trì tuy nhiên django hạt có thể được sử dụng như một sự thay thế:
Tôi muốn giới thiệu django-autofixtures cho bạn. Tôi đã thử cả django_seed và django-autofixtures, nhưng django_seed có rất nhiều vấn đề với các phím độc đáo. django-autofixtures sẽ chăm sóc các ràng buộc db duy nhất, chính và db khác trong khi điền vào cơ sở dữ liệu
- 1. Cơ sở dữ liệu thử nghiệm Django trông trống trong khi thử nghiệm là runnin
- 2. Tạo dữ liệu thử nghiệm trong cơ sở dữ liệu
- 3. Cơ sở dữ liệu thử nghiệm đơn vị Django không bị rách?
- 4. Thử nghiệm cơ sở dữ liệu trong python, postgresql
- 5. Tạo backtype.storm.tuple.Tuple cho mục đích thử nghiệm?
- 6. Cơ sở dữ liệu Xoay vòng - mục đích là gì?
- 7. Laravel tạo cơ sở dữ liệu khi thử nghiệm
- 8. Đối tượng giả vs Cơ sở dữ liệu thử nghiệm
- 9. MVC4 C# Populating dữ liệu trong một viewmodel từ cơ sở dữ liệu
- 10. Chỉ định Django thử nghiệm tên cơ sở dữ liệu trong settings.py
- 11. Chạy thử nghiệm đường ray mà không làm mất cơ sở dữ liệu thử nghiệm
- 12. lỗi ứng dụng thử django - Đã xảy ra lỗi khi tạo cơ sở dữ liệu thử nghiệm: được phép từ chối tạo cơ sở dữ liệu
- 13. Cơ sở dữ liệu SQL công cộng cho các mục đích giáo dục
- 14. Tách biệt cơ sở dữ liệu thử nghiệm của ứng dụng Sinatra từ cơ sở dữ liệu phát triển?
- 15. Python: chặn kết nối mạng cho mục đích thử nghiệm?
- 16. Tạo cơ sở dữ liệu tạm thời hoạt động trên các giai đoạn thử nghiệm maven?
- 17. có một cơ sở dữ liệu riêng biệt cho django-admin trong django
- 18. https thậm chí chỉ dành cho mục đích thử nghiệm?
- 19. Làm thế nào để sao chép một cơ sở dữ liệu thử nghiệm từ một cơ sở dữ liệu sản xuất trong một hành động đơn lẻ?
- 20. Thực hiện Cơ sở dữ liệu Đơn giản cho Mục đích Giáo dục
- 21. Rails thử nghiệm thông qua cào: không chạm vào cơ sở dữ liệu dev của tôi
- 22. Cơ sở dữ liệu đích không được cập nhật
- 23. Bạn có biết trình tạo dữ liệu thử nghiệm miễn phí cho cơ sở dữ liệu mysql không?
- 24. Tạo dữ liệu giả cho thử nghiệm đơn vị
- 25. Làm thế nào để tôi nói với Django để lưu cơ sở dữ liệu thử nghiệm của tôi?
- 26. Kiểm tra đơn vị Django mà không cần tạo cơ sở dữ liệu thử nghiệm mỗi khi tôi chạy
- 27. JUnit thử nghiệm cơ sở Auto Setup
- 28. Thiết lập môi trường thử nghiệm cơ sở dữ liệu đa dạng
- 29. Cách thiết lập cơ sở dữ liệu thử nghiệm và phát triển riêng lẻ trong meteor
- 30. Máy khách thử nghiệm của Django có nhiều giá trị cho các khóa dữ liệu
Bạn không muốn sắp xếp theo thứ tự. Bạn muốn tạo dữ liệu ban đầu bằng cách chạy trong trình bao, lưu các cá thể, và sau đó xuất khẩu cơ sở dữ liệu vào một lịch thi đấu ở định dạng như json bằng cách sử dụng loaddata: 'python manage.py dumpdata --format = json --indent = 4 appname' @Matthew Schinckel là gần nhất về điều này. – hughdbrown