Điều này liên quan đến câu hỏi này converting to declarative method and column property, chưa bao giờ được trả lời.SQLAlchemy Cách ánh xạ cột đơn của mối quan hệ một-một bằng cách khai báo
Chúng tôi đang cố gắng thiết lập dự án Flask-SQLAlchemy trên lược đồ hiện có (chúng tôi không thể thay đổi) và quyết định cú pháp khai báo để chúng tôi có thể sắp xếp các lớp thành nhiều tệp theo cách lành mạnh để bảo trì. Điều này làm việc cho hầu hết các mối quan hệ của chúng tôi ngoại trừ một cái gì đó mà chúng ta gọi, vì thiếu một thuật ngữ tốt hơn, các bảng thuộc tính. Đây là các bảng lá một-một trong một số đối tượng chính, và thường chứa một số từ vựng được kiểm soát cho thuộc tính. Mục tiêu trong ORM là ánh xạ tất cả các (trong đó có rất nhiều) các loại bảng như thể chúng là các thuộc tính của bảng chính.
Dưới đây là một ví dụ SQA với hai bảng:
class MarkerType(db.Model):
__tablename__="mrk_types"
_marker_type_key = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String())
class Marker(db.Model):
__tablename__="mrk_marker"
_marker_key=db.Column(db.Integer,primary_key=True)
_marker_type_key=db.Column(db.Integer())
Chúng tôi muốn truy cập MarkerType.name như thể chúng ta đang nói Marker.markertype, hoặc trong một truy vấn như Marker.markertype == 'điều'. Cách duy nhất tôi có thể quản lý đó là với một column_property trong lớp Marker, như vậy:
markertype = db.column_property(
db.select([MarkerType.name]).
where(MarkerType._marker_type_key==_marker_type_key)
)
Tuy nhiên, tôi dường như không thể tìm thấy làm thế nào để thực hiện điều này một cách tường thuật, và có lẽ như vậy không tồn tại. Có cách nào lành mạnh để tôi có thể đạt được điều này mà không phải lo lắng về việc nhập khẩu của tôi hay thậm chí tệ hơn thứ tự các lớp học của tôi? Vì chúng tôi có hàng trăm bảng để lập bản đồ, tôi có thể thấy đây là một cơn ác mộng bảo trì nếu chúng ta phải lo lắng về thứ tự lớp và thứ tự nhập.
Nếu tất cả điều này là hoàn toàn không thể, hãy suy nghĩ mơ ước, cách tiếp cận tốt hơn để lập bản đồ các bảng này là gì?
Bạn đã xem [Lập bản đồ thuộc tính dọc '] (http://docs.sqlalchemy.org/en/rel_0_9/orm/examples.html#module-examples.vertical) ví dụ? – van
Không, nhưng tôi không chắc chắn tình trạng của tôi có được áp dụng hay không. Tôi không có một bảng con với các cặp khóa giá trị. Đó là một bảng con chỉ với một giá trị. Tôi không chắc liệu điều đó vẫn được coi là một bảng thẳng đứng hay không. Ngoài ra, các ví dụ cho việc thiết lập assocation_proxy không nhìn khai báo. – kevinrstone