2008-10-06 10 views
27

Sau khi thực hiện một số thay đổi trong mô hình của tôi (ví dụ: trường mới trong mô hình và mô hình mới) cách tốt nhất để phản ánh những thay đổi này đối với cơ sở dữ liệu dân cư của tôi là gì?Cách tốt nhất để di chuyển dữ liệu trong django


PS: Tôi muốn xem nhiều giải pháp ở một nơi được xếp hạng. Rõ ràng nhiều giải pháp đã được liệt kê here.

Trả lời

16

Tôi đã hỏi một câu hỏi tương tự here và nhận được khá nhiều câu trả lời.

Có khá nhiều cách để làm việc đó, như bằng tay làm việc bán phá giá và tải lại với SQL, sử dụng đồ đạc hoặc bằng một trong những "nổi lên" gói schema-tiến hóa cho Django:

3

Phụ thuộc vào phạm vi thay đổi. Nếu nó vượt quá ALTER, bạn đang tiến hành phẫu thuật lớn. Tạo bản sao lưu của mô hình cũng như cơ sở dữ liệu để bạn có thể quay lại.

Sở thích của tôi là đặt mô hình mới (đã sửa đổi, sửa chữa, mở rộng) của bạn dưới dạng ứng dụng MỚI. Nó sẽ không có URL hay gì cả, chỉ là một mô hình.

  1. Tạo mô hình mới làm ứng dụng mới. Tạo kiểm tra, chỉ để chắc chắn nó hoạt động.
  2. syncdb để xây dựng triển khai tạm thời này của mô hình mới.
  3. Viết một tiện ích một lần nhỏ để truy vấn mô hình cũ của bạn và tải mô hình mới của bạn. Bạn có thể muốn thử điều này trong SQL thuần túy. Tôi thích viết một truy vấn đơn giản, xây dựng và lưu vòng lặp.
  4. Sau khi mô hình mới được tải, bạn có thể kết xuất tệp này vào tệp JSON.

Khi bạn đã lấy dữ liệu ra khỏi mô hình cũ, bạn có thể tạo lại DB của mình ở định dạng mới ưa thích.

  1. Chuyển mô hình mới vào ứng dụng hiện có của bạn.
  2. Thả phiên bản cũ của các bảng của ứng dụng.
  3. syncdb để tạo bảng mới.
  4. Tải tệp JSON bằng dữ liệu.
2

Tìm bằng manage.py sqlall tham số cho cột mới và thêm chúng theo cách thủ công trong cơ sở dữ liệu của bạn bằng bảng câu lệnh Alter. Bằng cách này bạn không phải làm lại cơ sở dữ liệu của bạn; Nó đòi hỏi một số kiến ​​thức SQL dù ...

Hãy xem here (Cuộn xuống "Thực hiện thay đổi đến một Schema Cơ sở dữ liệu")

23

Một kỹ thuật khác là sử dụng các đối số dumpdata và loaddata để quản lý.py, giết chết cơ sở dữ liệu của bạn ở giữa:

  1. python manage.py dumpdata > dump.json
  2. Với một công cụ bên ngoài, thả bất kỳ bảng bị ảnh hưởng, hoặc giết toàn bộ db
  3. python manage.py loaddata dump.json

Xem manage.py docs để biết thêm.

+0

'python manage.py sqlreset appname' in các câu lệnh SQL cần thiết, nhưng không thực sự chạy chúng. –

+0

Bạn đúng Vebjorn - cảm ơn, đã sửa. – shacker

+0

Giải pháp tốt. Cảm ơn. Trong trường hợp của chúng tôi, trên Django 14, chúng ta cần tạo một cơ sở dữ liệu rỗng trước khi tải các đồ đạc. DB có thể được tạo bởi syncdb, tuy nhiên, các kiểu nội dung được tạo tự động phải được loại bỏ thủ công, trước khi tải kết xuất. –

0

Perform these steps in order may help you:

For more details,

clickhere: http://south.readthedocs.org/en/latest/

1) python manage.py schemamigration apps.appname --initial

Trên bước tạo thư mục di cư như mặc định.

2) python manage.py migrate apps.appname --fake

tạo di chuyển giả.

3) python manage.py schemamigration apps.appname --auto

Sau đó, bạn có thể thêm các trường như bạn muốn và thực hiện các lệnh trên.

4) python manage.py migrate apps.appname

Sau đó di chuyển các tập tin cơ sở dữ liệu.