2010-04-30 38 views
16

Tôi có một số mô hình tôi đang làm việc với một cài đặt Django mới. Có thể thay đổi các trường mà không làm mất dữ liệu ứng dụng không?Django: Thay đổi mô hình mà không xóa tất cả dữ liệu?

Tôi đã thử thay đổi trường và chạy python manage.py syncdb. Không có đầu ra từ lệnh này.

Đổi hướng tới trang quản trị để chỉnh sửa các mô hình đã thay đổi đã gây ra TemplateSyntaxĐược xem là Django đã tìm cách hiển thị các trường không tồn tại trong db.

Tôi đang sử dụng SQLite.

Tôi có thể xóa tệp db, sau đó chạy lại python manage.py syncdb, nhưng đó là loại đau. Có cách nào tốt hơn để làm điều đó không?

Trả lời

5

Bạn sẽ phải cập nhật thủ công lược đồ/bố cục cơ sở dữ liệu, nếu bạn chỉ nói về việc thêm/xóa cột.

Nếu bạn đang cố đổi tên cột, bạn sẽ phải tìm một cách khác.

Bạn có thể sử dụng lệnh python manage.py sql [app name] (http://docs.djangoproject.com/en/dev/ref/django-admin/#sql-appname-appname) để xem SQL mới trông như thế nào, để xem cột nào, loại/đặc tả Django sẽ thêm bạn, sau đó chạy các lệnh ALTER TABLE tương ứng.

Có một số ứng dụng/dự án cho phép quản lý mô hình/DB dễ dàng hơn, nhưng Django không hỗ trợ việc này ra khỏi hộp, theo mục đích/theo thiết kế.

+0

Sách django có phần tốt về điều này. [link] http://www.djangobook.com/en/2.0/chapter10.html#Making%20Changes%20to%20a%20Database%20Schema [/ link] –

20

Django không bao giờ thay đổi cột cơ sở dữ liệu hiện có. Syncdb sẽ tạo ra các bảng, nhưng nó không làm 'di chuyển' như tìm thấy trong Rails, ví dụ. Nếu bạn cần một cái gì đó như thế, hãy kiểm tra Django South.

Xem the docs for syndb:

syncdb sẽ không làm thay đổi bảng hiện

syncdb sẽ chỉ tạo ra bảng cho các mô hình chưa được cài đặt. Nó sẽ không bao giờ phát hành các câu lệnh ALTER TABLE để phù hợp với các thay đổi được thực hiện cho một lớp mô hình sau khi cài đặt. Những thay đổi đối với các lớp mô hình và lược đồ cơ sở dữ liệu thường liên quan đến một số hình thức mơ hồ và, trong những trường hợp đó, Django sẽ phải đoán đúng những thay đổi cần thực hiện. Có một nguy cơ rằng dữ liệu quan trọng sẽ bị mất trong quá trình này.

Nếu bạn đã thực hiện thay đổi đối với mô hình và muốn thay đổi bảng cơ sở dữ liệu để khớp, hãy sử dụng lệnh sql để hiển thị cấu trúc SQL mới và so sánh với lược đồ bảng hiện có của bạn để tìm ra các thay đổi.

Bạn phải thay đổi tên cột trong DB của mình theo cách thủ công thông qua bất kỳ công cụ quản trị nào mà sqlite cung cấp. Tôi đã làm điều này với MySQL, ví dụ, và kể từ MySQL cho phép bạn thay đổi tên cột mà không ảnh hưởng đến dữ liệu của bạn, nó không có vấn đề.

8

Tất nhiên là có.
Khám phá South

+0

Đây là lỗi thời. – User

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