2013-06-09 29 views
5

Cố gắng xem SQL mà syncdb sẽ tạo tại thời điểm hiện tại.Django nhận lệnh synlb sqlall để cập nhật sau khi thay đổi mã

Sau nhiều tìm kiếm câu trả lời là không rõ ràng - Tôi biết bạn có thể sử dụng:

python manage.py syncdb --sqlall 

lợi nhuận:

Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created. 

Làm thế nào tôi có thể sản xuất những thay đổi đã xảy ra cho toàn bộ cơ sở dữ liệu nếu mã đã thay đổi?

Có cách nào để tạo tất cả SQL cho tất cả các ứng dụng cần syncdb'ing vào lúc này không? Hoặc cần tôi chỉ nói rõ từng ứng dụng? Tôi không tìm kiếm tất cả các câu lệnh SQL cho toàn bộ trang web, chỉ cho những thay đổi sẽ được thực hiện bởi một syncdb.

Tôi có một số ứng dụng cần tạo sql để mô tả các thay đổi. Tôi rõ ràng có thể liệt kê chúng, nhưng có cách nào để syncdb để con số này ra cho tôi?

Trả lời

6

Bạn có thể làm

./manage.py sqlall <app_name> 

để có được những sql statements and initial data for the app.

Nếu bạn muốn chỉ là sql statements,

./manage.py sql <app_name> 

Đây là một mangement command rằng in sqlall cho TẤT CẢ các ứng dụng được cài đặt. Ngoài ra, bạn có thể viết lệnh quản lý của riêng bạn để nhận tất cả các ứng dụng đã cài đặt và gọi số ./manage.py sql <app_name> cho mỗi ứng dụng.

+0

Cảm ơn kathikr - Nhưng có cách nào để tạo tất cả các câu lệnh cho tất cả các ứng dụng hiện có sẵn không?(như tôi nhấp vào liên kết của bạn) –

+1

Bạn có thể chỉ định nhiều ứng dụng (cách nhau khoảng trắng) trong dòng lệnh. Nhưng tôi không tin rằng có một nơi mà bạn có thể in "mọi" ứng dụng được cài đặt. – karthikr

+0

Sẽ rất quan tâm để biết nếu đó là một cách để sản xuất tất cả các báo cáo cho tất cả các ứng dụng - đó là điểm thực của câu hỏi. Sẽ sửa đổi. Cảm ơn bạn đã giúp đỡ. –

1

Gói Django Extensions có một số quản lý tùy chỉnh lệnh cho django, một trong các lệnh này là sqldiff:

https://github.com/django-extensions/django-extensions/blob/master/docs/sqldiff.rst

Thứ nhất,

sudo pip install django-extensions 

Tiếp theo, thêm django-phần mở rộng để ứng dụng đã cài đặt

INSTALLED_APPS = (
    ... 
    'django_extensions', 
    ... 
) 

Sau đó, bạn có thể

python manage.py sqldiff -a 

Bạn sẽ được trình bày với một danh sách đầy đủ của sự khác biệt, cũng như một danh sách dài các ALTER TABLE tuyên bố rằng sẽ đảm bảo tất cả các lĩnh vực được thiết lập đúng (chiều dài, null, unsigned, vv)

Bất kỳ bảng mà không phải là tạo ra sẽ được liệt kê, và sau đó bạn có thể đổ SQL để tạo ra chúng bằng cách sử

python manage.py sqlall {app_label} 

Nó đáng chú ý là thay đổi tên cột, sqldiff sẽ cố gắng đơn giản thả cột đổi tên và cr ăn những cái mới tại chỗ của họ - Vì vậy, không chỉ sao chép toàn bộ sqldiff và chạy nó chống lại sản xuất mà không kiểm tra.

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