Example #1
0
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)
Example #2
0
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)
Example #3
0
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 访问关联的所有实验记录。