2013-09-02 14 views
6

In alcune esercitazioni sqlalchemy, la funzione relation viene utilizzata per definire le relazioni sql. in questo modo:Sqlalchemy, relazione vs relazione

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

Ma alcuni articoli che offrono la relationship funzione, vale a dire:

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

La mia domanda è: qual è la differenza tra queste due funzioni, e almeno un motivo per utilizzare ciascuno di essi.

Grazie è anticipo

risposta

10

Secondo docs, sono sinonimi:

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

Un sinonimo di relazione().

E, in realtà:

Modificato nella versione 0.6: rapporto() è stato rinominato dalla sua precedente nome della relazione().

Quindi, utilizzare meglio relationship() in quanto è il nome più "fresco" dei due.

Problemi correlati