SQLAlchemy学习记录
一、关系定义
(一)一对多关系
onetomany
表示一对多的关系时,在子表类中通过 foreign key (外键)引用父表类。
然后,在父表类中通过 relationship() 方法来引用子表的类:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(64), nullable=False, index=True)
password = Column(String(64), nullable=False)
email = Column(String(64), nullable=False, index=True)
articles = relationship('Article')
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.username)
class Article(Base):
__tablename__ = 'articles'
id = Column(Integer, primary_key=True)
title = Column(String(255), nullable=False, index=True)
content = Column(Text)
user_id = Column(Integer, ForeignKey('users.id'))
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.title)
每篇文章有一个外键指向 users
表中的主键 id
, 而在 User
中使用 SQLAlchemy 提供的 relationship
描述 关系。而用户与文章的之间的这个关系是双向的,所以我们看到上面的两张表中都定义了 relationship
。
SQLAlchemy 提供了 backref
让我们可以只需要定义一个关系:
articles = relationship('Article', backref='author')
添加了这个就可以不用再在 Article
中定义 relationship
了
(二)一对一关系
一对一是两张表之间本质上的双向关系
要做到这一点,只需要在一对多<