class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return '<User %r>' % self.username
# 一 class Person(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) addresses = db.relationship('Address', backref='person',lazy='dynamic') # 多 class Address(db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(50)) person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
relationship函数:sqlalchemy对关系之间提供的一种便利的调用方式,关联不一样的表;html
backref参数:对关系提供反向引用的声明,在Address类上声明新属性的简单方法,以后能够在my_address.person来获取这个地址的person;git
lazy参数:决定了 SQLAlchemy 何时从数据库中加载数据,有四个可选方式:'select','joined','subquery','dynamic':github
ForeignKey参数:表明一种关联字段,将两张表进行关联的方式,表示一个person的外键,设定上必需要能在父表中找到对应的id值。web
class Parent(Base): id = Column(Integer, primary_key=True) child_id = Column(Integer, ForeignKey('child.id')) child = relationship("Child", backref=backref("parent", uselist=False)) class Child(Base): id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id'))
在一对多关系基础上的父表中使用backref函数,并添加uselist参数来表示一对一关系。sql
tags = db.Table('tags', db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')), db.Column('page_id', db.Integer, db.ForeignKey('page.id')) ) class Page(db.Model): id = db.Column(db.Integer, primary_key=True) tags = db.relationship('Tag', secondary=tags, backref=db.backref('pages', lazy='dynamic')) class Tag(db.Model): id = db.Column(db.Integer, primary_key=True)
若是想要用多对多关系,须要在两个类之间增长一个关联的辅助表。数据库
secondary参数:指定多对多关系中关系表的名字;canvas
backref函数:因为在这里咱们须要在每一页显示多个标签,因此使用backref参数添加一个反向引用,配置 Page.tags 加载后做为标签的列表。ruby