Django hỗ trợ các file SQL tải khi làm syncdb, đặt lại hoặc bắt đầu một Á hậu kiểm tra - điều này thực hiện chính xác những gì bạn mô tả:
http://docs.djangoproject.com/en/dev/howto/initial-data/#providing-initial-sql-data
Bạn cần phải tạo một "sql" thư mục trong ứng dụng của bạn thư mục, và sau đó đặt một tập tin có tên "mymodel.sql" trong thư mục đó (nơi "MyModel" là tên mô hình tương ứng).
myproject/
|--myapp/
|--sql/
|--mymodel.sql
Bạn có thể tạo SQL này bằng công cụ kết xuất cho cơ sở dữ liệu của mình.
- SQLite [1]: echo '.dump' | sqlite3 yourdbname.sqlite> myapp/sql/mymodel.sql
- MySQL [2]: mysqldump yourdbname> myapp/sql/mymodel.sql
- PostgreSQL [3]: pg_dump yourdbname> myapp/sql/mymodel.sql
Sau khi bán phá giá, bạn sẽ cần chỉnh sửa tệp để xóa mọi thứ trừ các câu lệnh INSERT thích hợp hoặc các nội dung phức tạp khác. Cụ thể, bạn phải loại bỏ xử lý giao dịch, tạo chỉ mục và tạo bảng SQL để tránh lỗi khi tải các câu lệnh tạo trùng lặp.
Tôi sử dụng phương pháp này để tải đồ đạc thực sự, thực sự lớn - phải mất quá lâu để xử lý các json, nhưng một nhập khẩu sql thẳng là khá linh hoạt. Lưu ý rằng phương pháp này sẽ tải sql cho bất kỳ lời gọi synchdb, reset, vv ngoài việc tải dữ liệu cho runner thử nghiệm - vì vậy bạn sẽ không thể có dữ liệu khác nhau cho các trường hợp thử nghiệm khác nhau và bạn phải xóa các tệp trước khi đặt lại nếu bạn không muốn chúng tải lại máy chủ sản xuất của mình.
[1] http://www.sqlite.org/sqlite.html
[2] http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
[3] http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP
Nếu tôi không nhầm tải sql sẽ nhanh hơn bởi vì nó không có các chi phí mà đồ đạc làm. Tôi đang tìm cách giải quyết vấn đề tương tự này. Tôi có một DB lớn để tải để thử nghiệm và tôi muốn giữ tải nhanh chóng. – Jeff
Tôi sử dụng các mối quan hệ chung rộng rãi, đó là một vấn đề khi sử dụng đồ đạc. Có vẻ như điều này vừa được giải quyết trong công việc hướng tới 1.2, xem http://docs.djangoproject.com/en/dev/topics/serialization/#natural-keys – knutin
Thật đáng tiếc khi bạn chỉ có thể bình chọn bình luận lên, chứ không phải xuống. Lời bình luận đầu tiên đó chỉ là những lời reek. – boatcoder