Tôi đã xác định một mô hình và tạo cơ sở dữ liệu được liên kết qua manager.py syncdb
. Bây giờ tôi đã thêm một số trường vào mô hình, tôi đã thử lại syncdb
, nhưng không xuất hiện. Khi cố truy cập các trường mới này từ các mẫu của tôi, tôi nhận được ngoại lệ "Không có cột", dẫn tôi tin rằng syncdb không thực sự cập nhật cơ sở dữ liệu. Lệnh đúng ở đây là gì?cập nhật cơ sở dữ liệu django để phản ánh các thay đổi trong các mô hình hiện có
Trả lời
Có vẻ như những gì bạn cần là một hệ thống di chuyển. South thực sự tốt đẹp, hoạt động tốt, có một số công cụ tự động hóa để giảm bớt công việc của bạn. Và có một số lớn tutorial.
lưu ý: syncdb không thể cập nhật bảng hiện có của bạn. Đôi khi không thể quyết định phải làm gì một cách tự động - đó là lý do tại sao các kịch bản phía nam là tuyệt vời.
cảm ơn vì đã chỉ ra công cụ thú vị này. Đối với bất cứ ai quan tâm, có một cuộc thảo luận sâu sắc về di chuyển cơ sở dữ liệu django ở đây: http://code.djangoproject.com/wiki/SchemaEvolution – theactiveactor
Liên kết của Nam cho thấy, "Nam đã không được chấp nhận. Từ Django 1.7 trở lên, di cư được tích hợp vào cốt lõi của Django. Nếu bạn đang chạy phiên bản trước, bạn có thể tìm thấy kho lưu trữ trên BitBucket. ". Giờ thì sao? – FaithReaper
liên kết trong câu trả lời bị hỏng –
deseb là công cụ tuyệt vời cho điều đó.
Sau khi cài đặt, bạn có thể viết ./manage.py sqlevolve và nó sẽ tạo các lệnh sql cần thiết để giữ cấu trúc cơ sở dữ liệu đồng bộ với các mô hình của bạn.
Điều này trông giống như những gì tôi cần. Sqlevolve có cam kết thay đổi không? – theactiveactor
Bạn cần phải thả bảng của mình trước khi có thể tạo lại chúng với syncdb
.
Nếu bạn muốn giữ lại dữ liệu hiện có, bạn cần phải tải xuống cơ sở dữ liệu, thả bảng, chạy syncdb
để tạo cơ sở dữ liệu mới, sau đó tải lại dữ liệu cũ của bạn vào bảng mới.
Có các công cụ trợ giúp việc này. Tuy nhiên, trong nhiều trường hợp, nó chỉ là dễ dàng để làm điều đó bằng tay.
Syncdb của Django không thay đổi các bảng hiện có trong cơ sở dữ liệu, do đó bạn phải thực hiện thủ công. Cách tôi luôn làm là:
- Thay đổi lớp mô hình trước.
- Sau đó chạy: manage.py sql myapp.
- Nhìn vào sql nó in ra và xem làm thế nào nó đại diện cho sự thay đổi bạn sẽ thực hiện.
- Thực hiện thay đổi theo cách thủ công bằng trình quản lý cơ sở dữ liệu của bạn.
- Kiểm tra xem mọi thứ có hoạt động chính xác không bằng cách sử dụng trang quản trị.
Nếu bạn đang sử dụng sqllite một người quản lý tốt là plugin firefox: link
Tôi thực sự nghĩ đây là giải pháp tốt nhất và dễ nhất – shrimpwagon
công cụ khác sẽ được tiến hóa django. Không có bảng rơi cần thiết trong hầu hết các trường hợp.
Chỉ cần cài đặt nó như bất kỳ ứng dụng django khác và chạy:
python manage.py tiến hóa --hint --execute
As of Django 1.7+, built-in migrations support , allows for database schema migrations that preserve data. That's probably a better approach than the solution below.
Một lựa chọn khác, không đòi hỏi các ứng dụng bổ sung, là sử dụng các hàm manage.py
được xây dựng để xuất dữ liệu của bạn, xóa cơ sở dữ liệu và khôi phục dữ liệu đã xuất.
Các phương pháp bên dưới sẽ cập nhật bảng cơ sở dữ liệu cho ứng dụng của bạn, nhưng sẽ hoàn toàn phá hủy mọi dữ liệu đã tồn tại trong các bảng đó. Nếu các thay đổi bạn đã thực hiện đối với mô hình ứng dụng không phá vỡ lược đồ cũ của mình (ví dụ: bạn đã thêm trường tùy chọn mới), bạn có thể chỉ cần đổ dữ liệu trước và tải lại sau đó, như sau:
Django 1.4.15 và trước đó
python manage.py dumpdata <your_app> > temp_data.json
python manage.py reset <your_app>
python manage.py loaddata temp_data.json
Django 1.5 và mới hơn
python manage.py dumpdata <your_app> > temp_data.json
python manage.py sqlclear <your_app> | python manage.py dbshell
python manage.py syncdb
python manage.py loaddata temp_data.json
(lệnh reset
đã bị phản đối và sau đó loại bỏ trong Django 1.5)
Nếu các thay đổi của bạn phá vỡ lược đồ cũ của bạn, điều này sẽ không hoạt động - trong trường hợp các công cụ như South hoặc Django Evolution thật tuyệt vời.
Cảm ơn vì điều này. Chỉ cần những gì tôi đang tìm kiếm. –
Tôi nghĩ giải pháp này là tốt nhất. –
cảm ơn, giải pháp tốt nhất :) –
Đối với phiên bản 1.4.1 và người sử dụng trên các lệnh đã thay đổi để
python manage.py flush
Hãy đọc official document trước khi sử dụng nó như là nó sẽ xóa tất cả dữ liệu của bạn.
Những gì tôi không hiểu là tuôn ra thực sự đặt lại cơ sở dữ liệu như sau khi' syncdb' được thực hiện, nhưng những gì về các trường mới được thêm vào ? Chúng không được tạo ra –
Kể từ Django 1.7, giờ đây bạn có thể thực hiện việc này với di chuyển gốc. Chỉ cần chạy
python manage.py makemigrations <your app name>
python manage.py migrate
- 1. Cập nhật mô hình từ cơ sở dữ liệu (Cơ sở dữ liệu đầu tiên)
- 2. Mô hình Django MVC cho các mô hình không được cơ sở dữ liệu điều khiển?
- 3. cách tạo mô hình Django không ánh xạ tới bảng cơ sở dữ liệu
- 4. Thay đổi bảng cơ sở dữ liệu ở Django
- 5. Cập nhật các phiên bản cơ sở dữ liệu sqlite?
- 6. tạo mô hình django cho cơ sở dữ liệu hiện có/chế độ xem sql?
- 7. Cập nhật cơ sở dữ liệu Android
- 8. Thông báo cập nhật trực tiếp về các thay đổi cơ sở dữ liệu MYSQL PHP
- 9. Cập nhật mô hình trong Cơ sở dữ liệu EF Dự án đầu tiên
- 10. Entitiy Framework: "Cập nhật cơ sở dữ liệu từ Model" thay vì "Tạo cơ sở dữ liệu từ Model"
- 11. mô hình lớp cơ sở trừu tượng và các lớp con trong cơ sở dữ liệu
- 12. Có thể cập nhật giản đồ cơ sở dữ liệu khuôn khổ ADO.NET Entity không?
- 13. Cập nhật giá trị cơ sở dữ liệu hiện có từ bảng tính
- 14. ray 3: cách tạo mô hình cho các bảng cơ sở dữ liệu hiện có
- 15. Java, cách thay đổi cơ sở dữ liệu hiện tại sang cơ sở dữ liệu khác?
- 16. Cập nhật trường bit sql trong cơ sở dữ liệu
- 17. Đặt tên gói rpm, truy vấn cơ sở dữ liệu yum để có các cập nhật
- 18. Re đánh giá truy vấn django sau khi thay đổi làm cho cơ sở dữ liệu
- 19. Cách thay thế tệp cơ sở dữ liệu sqlite hiện có bằng tệp cơ sở dữ liệu mới trong android
- 20. Android SimpleCursorAdapter không cập nhật khi thay đổi cơ sở dữ liệu
- 21. Làm cách nào để di chuyển/cập nhật lược đồ cơ sở dữ liệu trong Grails?
- 22. Django không phản ánh cập nhật cho các tập tin Javascript?
- 23. Theo dõi các thay đổi kể từ lần lưu cuối cùng trong các mô hình django
- 24. Cấu hình nhiều cơ sở dữ liệu trong Django 1.2
- 25. Sử dụng AJAX để xem cơ sở dữ liệu SQL cho các thay đổi
- 26. Mô hình không có quyền truy cập cơ sở dữ liệu trong symfony2
- 27. Giữ nội dung cơ sở dữ liệu về thay đổi mô hình
- 28. Cập nhật lược đồ cơ sở dữ liệu với hibernate
- 29. Làm thế nào để thực hiện các mối liên hệ đa hình trong cơ sở dữ liệu hiện có
- 30. Làm cách nào để thay đổi các lựa chọn trong mô hình Django?
Bạn nên thay đổi câu trả lời được chấp nhận. – User