Xin lưu ý rằng đây là không chính xác và quá phức tạp câu trả lời
Cách đúng là sử dụng index.create
như người ta nói here.
Trước hết hãy đảm bảo bạn có ảnh chụp nhanh mới nhất của cơ sở dữ liệu và có thể khôi phục cơ sở dữ liệu từ ảnh chụp nhanh này.
Đối với các dự án có kích thước trung bình và lớn (có thể bạn cần hỗ trợ nhiều phiên bản cùng một lúc và được cài đặt trên nhiều môi trường), đó là một phần của vòng đời quản lý cơ sở dữ liệu được gọi là "di chuyển cơ sở dữ liệu". Di chuyển DB bao gồm các thay đổi đối với lược đồ hiện có. SQLAlchemy không hỗ trợ di chuyển ra khỏi hộp.
Có hai SQLAlchemy tương thích các công cụ cơ sở dữ liệu di cư có sẵn:
Xem thêm thông tin và liên kết đến những công cụ này trong trang tài liệu SQLAlchemy: Altering Schemas through Migrations. Tuy nhiên, nếu bạn đang làm việc trên dự án nhỏ, tôi sẽ đề xuất để chạy ALTER TABLE DDL truy vấn từ tiện ích dòng lệnh cơ sở dữ liệu hoặc thông qua connection.execute() trong kịch bản lệnh python.
Trong ứng dụng sản xuất tôi đang làm việc ngay lúc này, chúng tôi chỉ hỗ trợ một phiên bản ứng dụng mới nhất.Đối với mỗi sự thay đổi giản đồ cơ sở dữ liệu chúng ta làm các bước sau:
- làm một bản chụp của cơ sở dữ liệu sản xuất
- tải ảnh chụp này trên môi trường phát triển
- cập nhật mô-đun mô hình dữ liệu SQLAlchemy
- chuẩn bị và chạy thay đổi truy vấn bảng và lưu truy vấn này cho sau
- thực hiện các thay đổi khác có liên quan đến mã
- chạy thử nghiệm trên môi trường dev
- triển khai phiên bản mới nhất của mã để sản xuất
- làm thay đổi bảng về sản xuất
Ngoài ra tôi đang sử dụng các thủ thuật sau đây để tạo ra tạo bảng/truy vấn chỉ số: tôi chỉ ứng dụng của tôi để thương hiệu cơ sở dữ liệu mới, cho phép ghi nhật ký truy vấn sqlalchemy và chạy metadata.create_all()
- vì vậy trong nhật ký (hoặc STDOUT), tôi thấy truy vấn được tạo bởi sqlalchemy
Tùy thuộc vào hệ thống cơ sở dữ liệu bạn đang sử dụng truy vấn tạo chỉ mục. truy vấn Generic sẽ trông như thế này:
create index targets_i on targets(url);
xin lỗi, câu trả lời này là sai. ALTER TABLE không được sử dụng cho các chỉ mục. SQLAlchemy hỗ trợ "CREATE INDEX" rất trực tiếp bằng cách sử dụng 'Index.create()', cũng như với cấu trúc DDL 'CreateIndex' cho các tình huống kịch bản phức tạp hơn. Không cần phải lấy đầu ra "create_all()" hoặc bất cứ thứ gì như thế. – zzzeek
Cảm ơn bạn đã chỉ ra. Tôi đồng ý - Tôi đã mô tả cách triển khai và hỗ trợ cách tiếp cận được đề cập trong câu hỏi. Và hoàn toàn quên đi 'index.create' dễ dàng và nhanh chóng. – vvladymyrov