2013-09-02 5 views
6

В некоторых учебниках по sqlalchemy, relation функция, используемая для определения sql-отношений. как это:Sqlalchemy, отношение vs отношение

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") 

Но некоторые статьи, предлагающие relationship функции, то есть:

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)) 

Мой вопрос: какова разница между этими двумя функциями, и по крайней мере причина использовать каждый из них.

Благодаря это заранее

ответ

10

Согласно docs, они являются синонимами:

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

синоним отношений().

И, на самом деле:

Изменено в версии 0.6: отношения() была переименована из предыдущего имя отношения().

Таким образом, лучше использовать relationship(), поскольку это самое «свежее» имя из двух.

Смежные вопросы