2012-07-18 50 views
10

Tôi muốn làm cho một bãi chứa trong django không phân biệt cơ sở dữ liệu tôi đang sử dụng và có thể được tải sau này. Lệnh 'dumpdata' là hoàn hảo cho điều này, nhưng nó là đầu ra in trên bàn điều khiển. Nhiều hơn tôi gọi nó bằng cách sử dụng chức năng call_command vì vậy tôi không thể lưu trữ nội dung của nó trong bất kỳ biến vì nó là đầu ra in trên bàn điều khiển.Làm thế nào để làm cho dumpfile db trong django

Vui lòng cho tôi biết cách kết xuất cửa hàng vào tệp bằng cách sử dụng dumpdata hoặc bất kỳ lệnh hoặc api nào khác.

Cảm ơn

+0

Tôi hiểu lắm câu hỏi của bạn ban đầu, nhưng tôi đã thêm một câu trả lời có sử dụng call_command . – bouteillebleu

+0

ya cảm ơn rất nhiều, nó đã giúp ích rất nhiều :) –

Trả lời

18

Bạn thể chọn một tập tin để đưa đầu ra của dumpdata vào nếu bạn gọi nó từ bên trong Python sử dụng call_command, ví dụ:

from django.core.management import call_command 

output = open(output_filename,'w') # Point stdout at a file for dumping data to. 
call_command('dumpdata','model_name',format='json',indent=3,stdout=output) 
output.close() 

Tuy nhiên, nếu bạn cố gắng gọi này từ dòng lệnh với ví dụ --stdout=filename.json ở cuối lệnh dumpdata của bạn, nó đưa ra lỗi manage.py: error: no such option: --stdout.

Vì vậy, nó ở đó, bạn chỉ cần gọi nó trong một kịch bản Python chứ không phải trên dòng lệnh. Nếu bạn muốn nó như là một tùy chọn dòng lệnh, sau đó chuyển hướng (như những người khác đã đề nghị) là đặt cược tốt nhất của bạn.

+0

cảm ơn đây là những gì tôi muốn .... –

+9

Câu trả lời hay! Nhưng thụt lề = 3 ?? Bạn đang phá vỡ trái tim python 4 không gian của tôi. – Civilian

0

Trong Linux, bạn chỉ có thể đặt đầu ra bàn điều khiển thành tệp.

manage.py dumpdata> tập tin

4

django-admin.py dumpdata

đầu ra để đầu ra tiêu chuẩn tất cả các dữ liệu trong cơ sở dữ liệu liên quan đến các ứng dụng có tên (s).

Như bạn đã biết, bạn có thể redirect đầu ra tiêu chuẩn vào một tệp:

command > file.data 
+0

Đây là câu trả lời tốt nhất trong quan điểm của tôi vì nó trả lời vấn đề cốt lõi của mình: "Hãy cho tôi biết cách lưu trữ một tệp bằng cách sử dụng dumpdata hoặc bất kỳ lệnh nào khác hoặc api'' Sử dụng linux tích hợp có vẻ hoàn toàn phù hợp. – raiderrobert

12

Bạn chỉ cần sử dụng nó như thế:

./manage.py dumpdata > data_dump.json 

Sau hành động đó, sẽ có data_dump.json tập tin trong thư mục mà bạn đã thực hiện lệnh đó.

Có nhiều tùy chọn đến với điều đó, nhưng có thể bạn đã biết điều đó. Điều bạn cần biết là làm thế nào để chuyển hướng đầu ra từ đầu ra tiêu chuẩn vào một số tập tin: bạn thực hiện hành động đó bằng cách đặt > trước tên tệp.

Để thêm thứ gì đó vào tệp bạn sẽ sử dụng >>, nhưng vì bạn đang đổ dữ liệu từ Django và đầu ra rất có thể là JSON, bạn sẽ không muốn điều đó (vì nó sẽ làm cho JSON không hợp lệ).

+0

u có thể cho tôi biết làm thế nào để làm điều đó mà không cần sử dụng chuyển hướng, hãy nhớ là nền tảng phụ thuộc –

+0

@ParitoshSingh Chuyển hướng với> hoạt động trong Unix (và do đó OS X) và trong Windows; có nền tảng nào khác mà bạn muốn chạy trên nền tảng này không? – bouteillebleu

+0

@bouteillebleu ofcourse tôi muốn làm cho nó nền tảng độc lập, tức là lý do tại sao tôi đang sử dụng dữ liệu đổ django, nếu đó là trường hợp tôi sẽ có văn bản làm dumpfile cụ thể cho db tôi đang sử dụng .... –

1

Như được đề cập trong số docs, để kết xuất bộ dữ liệu lớn, bạn có thể tránh các phần gây ra sự cố và xử lý riêng chúng.

Lệnh sau đây không thường làm việc:

python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json 

python manage.py loaddata db.json 

Trong trường hợp bạn có thể xuất sau các dữ liệu loại trừ:

python manage.py dumpdata auth.permission > auth.json 

python manage.py loaddata auth.json 
Các vấn đề liên quan