简介:
一:一对多关系
1.表示一对多的关系时,在子表类中通过 foreign key (外键)限制本列的值,然后,在父表类中通过 relationship() 方法来引用子表的类。
2.示例代码:
class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) children = relationship("Child") # 在父表类中通过 relationship() 方法来引用子表的类集合 class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id')) # 在子表类中通过 foreign key (外键)引用父表的参考字段
3.
二:一对一关系
1.
2.
3.
三:多对多关系
1.
2.
3.
四:主要命令
示例代码:
class Parent(Base):
__tablename__ = 'parent' id = Column(Integer, primary_key=True) children = relationship("Child") # 在父表类中通过 relationship() 方法来引用子表的类集合 class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id')) # 在子表类中通过 foreign key (外键)引用父表的参考字段
1.ForeignKey
其含义为,其所在的列的值域应当被限制在另一个表的指定列的取值范围之类。这一特性是关系型数据库的核心特性之一。
并且关联到另一个类(数据库定义)
2.relationship
relationship相当于组合查询。
1.2组合,就能实现组合查询。
首先查找一个Parent,然后根据关联的parent.id,查找这个Parent的Child
#相当于,查过Parent,直接查出Child dc=Session.query(Parent).filter(Parent.name == '河北').first() dc.children=Session.query(Child).filter(Child.parent_id == 1).all() print(dc) print(dc.name) print(dc.children)
3.backref
当你需要在一个表里面进设计多个relationship到一个表的时候。
需要backref来指定关联的列名。
示例代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
class User_Jobs(Base): __tablename__ = 'user_jobs' id = Column(Integer, primary_key=True) worker = relationship("Users",backref='users.jobs_id') name = Column(String(20)) # 在父表类中通过 relationship() 方法来引用子表的类集合 def __repr__(self): return 'name:%s' % self.name class User_Groups(Base): __tablename__ = 'user_groups' id = Column(Integer, primary_key=True) worker = relationship("Users",backref='users.groups_id') name = Column(String(20)) # 在父表类中通过 relationship() 方法来引用子表的类集合 def __repr__(self): return 'name:%s' % self.name class Users(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) jobs_id = Column(Integer, ForeignKey('user_jobs.id'), nullable=False)#这里用表名,不是类名 job=relationship('User_Jobs') groups_id = Column(Integer, ForeignKey('user_groups.id'), nullable=False) # 这里用表名,不是类名 group = relationship('User_Groups') name = Column(String(20))
4.foreign_keys
5.secondary
连接多对多关系时,指定临时表用。是relationship的可选参数。
多对多关系,没有第三张临时表,是无法实现的。
使用Table来设计表,不用class类来设计表。
6.table
建立关系表用,不需要class类来建立表。