2008-12-12 35 views
6

Tôi sử dụng SQLAlchemy tại nơi làm việc và công việc đó thực sự tốt. Bây giờ tôi đang suy nghĩ về thực hành tốt nhất.Cách tốt nhất để sắp xếp các thư mục chứa các mô hình SQLAlchemy

Còn bây giờ, tôi có thể tạo một module giữ tất cả những thứ SQLA:

my_model 
     |__ __init__.py 
     |__ _config.py <<<<< contains LOGIN, HOST, and a MetaData instance 
     |__ table1.py <<<<< contains the class, the model and the mapper for table1 
     |__ table2.py <<<<< contains the class, the model and the mapper for table2 
     [...] 

Bây giờ, tôi thực sự không biết nếu đó là cách tốt nhất để làm điều đó. Tôi muốn tải các lớp có độ chi tiết cao và đảm bảo tạo một kết nối chỉ với db, v.v.

Ở đây, tất cả các lớp được tách ra, nhưng tất cả nhập _config và tôi tự hỏi nếu đó là một điều tốt .

Hơn nữa, tôi muốn có thể tạo các lớp con của các lớp mô hình có thể được lưu trữ độc lập mà không cần phải làm rối tung lên trình ánh xạ mỗi lần. Làm thế nào tôi có thể làm điều đó ?

Hiện tại, tôi chỉ cần đặt chúng vào cùng một tệp và tôi phải tạo một trình ánh xạ khác, nhưng trình ánh xạ đầu tiên vẫn được gọi mỗi lần. Điều tương tự cũng sẽ xảy ra nếu tôi phải nhập lớp cha vì trình ánh xạ được kích hoạt khi nhập. Nếu tôi không sử dụng lớp để truy cập dữ liệu, có phải nó quá nóng để ánh xạ nó mỗi lần không?

Tôi cũng muốn tránh sử dụng Elixir.

Trả lời

3

Cá nhân tôi muốn giữ logic cơ sở dữ liệu/ORM trong các lớp mô hình. Nó làm cho chúng dễ dàng hơn để kiểm tra. Tôi thường có một cái gì đó giống như một types.py xác định các loại được sử dụng trong ứng dụng của tôi, nhưng độc lập với cơ sở dữ liệu.

Sau đó thường có một db.py hoặc một cái gì đó tương tự mà có lớp Session và phần còn lại của mã cần thiết để thiết lập cơ sở dữ liệu, bao gồm tất cả các người vẽ bản đồ, vv

Không ai trong số các module khác, ngoại trừ những người mà thực hiện hoạt động cơ sở dữ liệu cần nhập mô-đun db và sự tồn tại của cơ sở dữ liệu hoàn toàn bị ẩn khỏi hầu hết các lớp ứng dụng.

Theo như tôi biết, bạn không thể dễ dàng tạo lớp con mà không thay đổi người lập bản đồ. SQLAlchemy sẽ không có cách nào để biết lớp con nào cần lấy ra từ cơ sở dữ liệu khi bạn thực hiện một truy vấn và bạn cần có khả năng chỉ ra lớp con khi bạn đang lưu trữ dữ liệu.

Tôi chưa thực sự thấy bất kỳ vấn đề nào phát sinh khi gọi tất cả những người lập bản đồ cùng một lúc từ mô-đun db chính, vì vậy tôi không nghĩ rằng việc khởi tạo tất cả thời gian thực sự là mối quan tâm trừ khi bạn thực sự xác định đó là nút cổ chai. Theo kinh nghiệm của tôi, việc xử lý khác là một yếu tố lớn hơn nhiều so với chi phí của người lập bản đồ nhỏ.

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