Sqlalchemy,关系与关系

时间:2013-09-02 17:53:38

标签: python sqlalchemy

在一些sqlalchemy教程中,relation函数用于定义sql-relationships。像这样:

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

我的问题是:这两个功能之间有什么区别,至少是使用每个功能的原因。

谢谢是提前

1 个答案:

答案 0 :(得分:12)

根据docs,它们是同义词:

  

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

     

relationship()的同义词。

而且,实际上:

  

版本0.6中已更改:relationship()已从之前的版本重命名   name relation()。

因此,最好使用relationship(),因为它是两者中最“新鲜”的名称。