Django đổ dữ liệu cho một mô hình duy nhất?


144

Tôi có thể thực hiện một dumpdatatrong Django trên chỉ là một mô hình duy nhất, chứ không phải là toàn bộ ứng dụng, và nếu như vậy, làm thế nào?

Đối với một ứng dụng, nó sẽ là:

python manage.py dumpdata myapp

Tuy nhiên, tôi muốn một số mô hình cụ thể, chẳng hạn như "myapp.mymodel" bị hủy bỏ. Lý do là, tôi có một số lượng lớn, 3 triệu hồ sơ cộng với các bộ dữ liệu trong cùng một ứng dụng mà tôi không muốn bị hủy.


1
Tôi thấy câu hỏi của bạn không dễ hiểu. Bạn muốn tải một kết xuất SQL vào cơ sở dữ liệu của bạn? Hoặc bạn muốn thực hiện một số loại toString () và ví dụ của một mô hình?
Leonard Ehrenfried

Câu trả lời:


245

Kể từ phiên bản 1.1 trở lên, dumpdatalệnh quản lý Django cho phép bạn kết xuất dữ liệu từ các bảng riêng lẻ:

./manage.py dumpdata myapp1 myapp2.my_model

Bạn cũng có thể tách nhiều ứng dụng và mô hình trên dòng lệnh. Đây là định nghĩa chính tắc:

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

17
gath, đã không hiểu phiếu bầu tiêu cực trên bài viết gần 2 năm tuổi. Hơn nữa, mã trên đã hoạt động tốt ngay cả với v1.1. Các tính năng mới trong bản phát hành mới không làm cho câu trả lời cũ không hợp lệ.
đơn giản là

1
Và làm cách nào để thêm dữ liệu này vào một phiên bản khác của ứng dụng?.
aguilarpgc

1
Để làm cho con người có thể đọc được, hãy sử dụng cờ --indent 4saudumpdata
Valery Ramusik

103

Như đã lưu ý, bạn không thể thực hiện điều này thông qua lệnh Manage.txt trong Django 1.0. Tuy nhiên, bạn có thể sử dụng tập lệnh để xuất tệp JSON và tải nó bằng cách sử dụng 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()

4
Đây là một kịch bản tuyệt vời bởi vì bạn có thể nhận được nhiều chi tiết hơn nếu bạn muốn. Thay vào đó, nếu bạn thực hiện một .filter (...) trên dòng ba ở trên, bạn có thể kết xuất các bản ghi cụ thể mà bạn muốn.
Gringo Suave

1
Đẹp! Chắc chắn kiểm soát tốt hơn theo cách này.
Luis Artola

9

Đưa tất cả dữ liệu vào định dạng json từ mô hình django.

Cú pháp:

python manage.py dumpdata app_name.model_name

dụ: kết xuất dữ liệu từ mô hình group_ allow nằm trong ứng dụng auth mặc định trong django.

python manage.py dumpdata auth.group_permission

Đối với đầu ra hãy xem trên bàn điều khiển .


6

Tôi nghĩ rằng bạn đã có giải pháp trong câu hỏi của bạn. Bạn có thể kết xuất một mô hình riêng lẻ như thế này:

./manage.py dumpdata myapp.my_model

tôi đã thử nó trước khi đăng. không có may mắn Tôi đang ở django 1.0. cũng đã thử myapp.models.mymodel?
chiến lược

4

Để thành công, tôi đã phải nói hai lần và chỉ định mô hình hai lần, như:

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

Nếu tôi chỉ nói

./manage.py dumpdata myapp2 myapp2.my_model

Tôi đã tràn ngập tất cả các mô hình trong myapp2, mặc dù thực tế là tôi đã chỉ định my_model.


1

Như một giải pháp thay thế, bạn có thể tạo một ứng dụng khác và sao chép mô hình nhưng trỏ nó vào bảng hiện có với tùy chọn meta db_table. Sau đó, bạn có thể kết xuất các mô hình bạn đã sao chép vào ứng dụng mới. Ứng dụng hiện tại của bạn sẽ không bị ảnh hưởng.


1

Tôi đã tạo một lệnh quản lý để tạo ra một vật cố định trên cơ sở từng mô hình. Lịch thi đấu có thể được tạo ra bằng cách chạy:

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

mã tại: https://gist.github.com/2394883


1

Để viết nó vào tập tin cụ thể:

python manage.py dumpdata app_label.ModelName app_label.ModelName2 > fixtures/specic.json
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.