class Role(SurrogatePK, Model): __tablename__ = 'roles' name = Column(db.String(80), unique=True, nullable=False) user_id = ReferenceCol('users', nullable=True) user = relationship('User', backref='roles') def __init__(self, name, **kwargs): db.Model.__init__(self, name=name, **kwargs) def __repr__(self): return '<Role({name})>'.format(name=self.name)
class Role(SurrogatePK, Model): """A role for a user.""" __tablename__ = "roles" name = Column(db.String(80), unique=True, nullable=False) user_id = reference_col("users", nullable=True) user = relationship("User", backref="roles") def __init__(self, name, **kwargs): """Create instance.""" db.Model.__init__(self, name=name, **kwargs) def __repr__(self): """Represent instance as a unique string.""" return "<Role({name})>".format(name=self.name)
2017-08-30 18:02:37,899 INFO sqlalchemy.engine.base.Engine ('aiden', 1) Out[69]: <User(name=aiden)> 创建数据库表 可以基于 SQLAlchemy 定义的类中生成数据库表,下面尝试创建一个新的实验表 lab,一个课程将对应于多个实验。所以课程表 course 和 lab 表是 1:M 一对多的关系。在定义 Lab 类之前,需要先将创建 Course 类,使其映射到之前定义的 course 表: In [80]: from sqlalchemy.orm import relationship In [81]: from sqlalchemy import ForeignKey In [84]: class Course(Base): ...: __tablename__ = 'course' ...: id = Column(Integer, primary_key=True) ...: name = Column(String) ...: teacher_id = Column(Integer, ForeignKey('user.id')) ...: teacher = relationship('User') ...: def __repr__(self): ...: return '<Course(name=%s)>' % self.name ...: 上面的代码引入了一些新的东西。前文中创建的 course 表有外键 teacher_id, 在 SQLAlchemy 中可以使用 ForeignKey 设置外键。设置外键后,如果能够直接从 Course 的实例上访问到相应的 user 表中的记录会非常方便,而这可以通过 relationship 实现。上面的代码通过 relationship 定义了 teacher 属性,这样就可以直接通过 course.teacher 获取相应的用户记录。Course 类定义后,接着定义 Lab 类: In [89]: class Lab(Base): ...: __tablename__ = 'lab' ...: id = Column(Integer, primary_key=True) ...: name = Column(String(64)) ...: course_id = Column(Integer, ForeignKey('course.id')) ...: course = relationship('Course', backref='labs') ...: def __repr__(self): ...: return '<Lab(name=%s)>' % self.name ...: 以上代码定义了 Lab 类,需要注意的地方是定义 course 属性时,使用了 relationship 的 backref 参数,该参数使得可以在 Course 实例中,通过 course.labs 访问关联的所有实验记录。