2011-10-08 27 views
5

Tôi có một lớp:Python/SQLAlchemy - quan hệ tải khi khóa ngoại được cập nhật?

class Chart(Base): 
    __tablename__ = 'chart' 
    id = C('chart_id', Integer, primary_key=True) 
    element_id = C(Integer, ForeignKey('element.element_id')) 
    element = relationship(Element) 
    name = C(String) 

    def __init__(self, name): 
     self.name = name 

Cách sử dụng khá phổ biến,

chart = Chart('Some name') 
chart.element_id = element_id 

Nhưng chart.element là None sau khi cài đặt element_id. Có cách nào để tự động tải mối quan hệ này cho đối tượng mới trước khi tuôn ra/cam kết?

Trả lời

5

Lựa chọn tốt nhất là

chart = Chart('Some name') 
chart.element = element 

đối tượng trực tiếp Assign để con tàu liên quan. Nếu bạn được gán element_id thì cho đến khi nó tuôn ra nó sẽ nằm trong bộ nhớ. Bên trong nó sẽ kích hoạt truy vấn SELECT * FROM ELEMENT WHERE ELEMENT.id = element_id nhưng dữ liệu element_id đó không lưu trữ hoặc nó sẽ nằm trong bộ nhớ.

Vì vậy, tôi khuyên bạn nên chỉ định đối tượng trực tiếp nếu bạn không muốn tuôn ra.

Hy vọng điều này sẽ giúp bạn.

+1

Cảm ơn bạn đã phản hồi. Tôi đang sử dụng cách này ngay bây giờ. Hàm của tôi nhận element_id, và tôi lấy phần tử của chính mình để thiết lập nó trong một đối tượng Chart (flush được thực hiện bên trong). Có vẻ đó là cách duy nhất. – Victor

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