2010-12-28 30 views
7

Tôi có một triển khai Django trong sản xuất sử dụng MySQL.Cách di chuyển mô hình Django từ mysql sang sqlite (hoặc giữa hai hệ thống cơ sở dữ liệu)?

Tôi muốn phát triển thêm với SQLite, vì vậy tôi muốn nhập dữ liệu hiện có của mình vào cơ sở dữ liệu SQLite. Tôi

Có một kịch bản lệnh shell here để chuyển đổi một kết xuất MySQL chung thành SQLite, nhưng nó không hoạt động đối với tôi (dường như vấn đề chung không dễ).

Tôi đã thực hiện việc này bằng các mô hình Django phải dễ dàng hơn nhiều. Bạn sẽ làm điều này như thế nào? Có ai có bất kỳ kịch bản để làm điều này?

Trả lời

17

sử dụng

manage.py dumpdata > your_file.json 

để xuất dữ liệu của bạn từ hệ thống sản xuất (docs).

Sau đó di chuyển các tập tin trên hệ thống phát triển và chạy

manage.py loaddata your_file.json 

Bạn cũng có thể đặt các tập tin trong your_app/đồ đạc thư mục với tên "initial_data.json" và nó sẽ được tự động tải khi bạn chạy "quản lý .py syncdb "(docs).

2

Bạn đã thử sử dụng manage.py dumpdata > datadump và sau đó khi cơ sở dữ liệu mới được thiết lập chính xác, hãy sử dụng python manage.py loaddata datadump?

0
+0

nam là thích hợp nhất cho schema di chuyển, không cho dữ liệu xuất nhập khẩu –

+0

@mosta: các tính năng di chuyển lược đồ ở phía nam là tuyệt vời, nhưng phía nam cũng có khả năng di chuyển dữ liệu tốt. – mkelley33

1

Nếu bạn có contenttypes trong ứng dụng được cài đặt

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
) 

Sử dụng kịch bản giống như những gì để sao chép bạn nhập cảnh vào cơ sở mới:

from django.contrib.contenttypes.models import ContentType 

    def run(): 

     def do(Table): 
      if Table is not None: 
       table_objects = Table.objects.all() 
       for i in table_objects: 
        i.save(using='slave') 

     ContentType.objects.using('slave').all().delete() 

     for i in ContentType.objects.all(): 
      do(i.model_class()) 

Xem đầy đủ thủ here

+0

Tôi nghĩ bạn quên đề cập đến điều gì đó. Đây là những điều làm việc cho tôi 1) Đảm bảo các thiết lập chính xác (ví dụ: nếu không có contenttypes thêm nó). sau đó 'python manage.py syncdb --database slave' hoặc' python manage.py di chuyển - slave cơ sở dữ liệu'. 2) Viết hàm 'run()' ở đâu đó. 3) Gọi nó từ 'python manage.py shell' hoặc tạo lệnh tùy chỉnh django (https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/)[https://docs.djangoproject .com/vi/1,9/howto/custom-management-commands /] và sử dụng nó. –

+0

Tôi tin rằng, điều này sẽ làm việc với các dbs khác. –

+0

Đó là câu trả lời khá lỗi thời. Django mới nhất có phiên bản 'dumpdata' tốt hơn, vì vậy bạn không cần phải tạo giải pháp tùy chỉnh để chuyển đổi giữa DB. – inoks

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