2011-08-09 48 views
13

Tôi đã phát triển một ứng dụng django đơn giản sử dụng sqlite3. Lúc đầu, tôi muốn giữ nó đơn giản bằng cách sử dụng sqlite3 nhưng mọi thứ đang bắt đầu mở rộng (Có, tôi thực sự bắt đầu sử dụng ứng dụng đó với sqlite3! Xấu hổ về tôi ...) vì vậy tôi muốn di chuyển tất cả dữ liệu của mình sang cơ sở dữ liệu postgresql.Làm thế nào để sao chép cơ sở dữ liệu trong sử dụng cơ sở dữ liệu khác trong django?

Liệu django này hay cách khác của bên thứ ba cung cấp tính năng như vậy, hay tôi nên chịu đau khổ vì sự ngu dốt của riêng tôi ...

+0

Có thể trùng lặp: http://stackoverflow.com/questions/4581727/convert-sqlite-sql-dump-file-to-postgresql –

Trả lời

2

Tôi cố gắng để làm điều tương tự ngay bây giờ, nhưng tôi đang chạy vào một vấn đề với việc giải quyết các phụ thuộc về cơ bản giống như ticket 16317. Nhưng đủ về tôi ...

Khắc phục sự cố này đã dẫn tôi tìm liên kết cho django-smuggler cho phép bạn tạo bãi chứa và tải dữ liệu từ giao diện quản trị.

Có vẻ hứa hẹn cho bất kỳ chuyển dữ liệu cần thiết hoặc sử dụng như một tiện ích sao lưu.

25

Thứ nhất, thực hiện

manage.py dumpdata > out.json 

sau đó thay đổi cấu hình DB của bạn, di chuyển (hoặc syncdb) và cuối cùng

echo "delete from auth_permission; delete from django_content_type;" | python manage.py dbshell 

(Nếu bạn có Django lớn hơn 1.11, bạn cần phải sử dụng

echo "delete from django_content_type;" | manage.py dbshell 

)

Sau đó tải các tệp JSON:

manage.py loaddata out.json 

(như năm 2013 django_contenttype được thay thế bằng django_content_type)

+0

Tôi nhận được lỗi như sau: Lỗi toàn vẹn: giá trị khóa trùng lặp vi phạm ràng buộc duy nhất " django_content_type_app_label_model_key " CHI TIẾT: KEY (app_label, model) = (admin, logentry) đã tồn tại – yasar

+1

bạn đã thay đổi db chưa? Khi bạn đổ dữ liệu, bạn có thể xóa các bảng mà bạn có, cập nhật lược đồ, chạy syncdb (bảng sẽ được tạo lại) và tải lại dữ liệu (nhớ nếu bạn xóa một số cột khỏi lược đồ, bạn cần xóa nó khỏi tệp json) quá). Bạn có thể xem các bảng và truy vấn cần thiết để đặt lại ứng dụng, khi bạn chạy "manage.py sqlreset appname". Và cũng có thể, --indent = 4 sẽ giúp với lệnh dumpdata;) –

+0

btw - http://stackoverflow.com/questions/5739880/django-update-database-schema-without-loosing-data có thể hữu ích .. –

Các vấn đề liên quan