2013-09-02 68 views
6

Trong một số hướng dẫn sqlalchemy, relation chức năng được sử dụng để xác định các mối quan hệ sql. như thế này:Sqlalchemy, mối quan hệ và mối quan hệ

class Movie(DeclarativeBase): 
    __tablename__ = "movies" 

    movie_id = Column(Integer, primary_key=True) 
    title = Column(String(100), nullable=False) 
    description = Column(Text, nullable=True) 
    genre_id = Column(Integer, ForeignKey('genres.genre_id')) 
    genre = relation('Genre', backref='movies') 
    release_date = Column(Date, nullable=True) 

class Director(DeclarativeBase): 
    __tablename__ = "directors" 

    director_id = Column(Integer, primary_key=True) 
    title = Column(String(100), nullable=False) 
    movies = relation(Movie, secondary=movie_directors_table, backref="directors") 

Nhưng một số điều đưa ra relationship chức năng, tức là:

class Address(Base): 
    __tablename__ = 'addresses' 
    id = Column(Integer, primary_key=True) 
    email_address = Column(String, nullable=False) 
    user_id = Column(Integer, ForeignKey('users.id')) 
    user = relationship("User", backref=backref('addresses', order_by=id)) 

Câu hỏi của tôi là: sự khác biệt giữa hai chức năng là gì, và ít nhất một lý do để sử dụng mỗi một.

Cảm ơn là trước

Trả lời

10

Theo docs, họ là từ đồng nghĩa:

sqlalchemy.orm.relation(*arg, **kw)

Đồng nghĩa với mối quan hệ().

Và, trên thực tế:

Thay đổi trong phiên bản 0.6: Mối quan hệ() được đổi tên từ trước liên quan tên gọi của nó().

Vì vậy, hãy sử dụng tốt hơn relationship() vì đây là tên "tươi" nhất của cả hai.

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