day04-models一对多、分页

1 数据的分页 view.py

@blue.route('/page/') def page(): if request.method == "GET": '''分页''' page = int(request.args.get('page', 1)) '''1.offsite +limit''' Students.query.offset((page - 1) * 2).limit(2)# 2.切片 stus = Students.query.all()[(page - 1) * 2:page * 2]# 3.sql sql = 'select * from students limit %s,%s ' % ((page - 1) * 2, 2)''' 4. paginate()方法''' paginate = Students.query.paginate(page, 2) stus = paginate.itemsreturn render_template('page.html', stus=stus, paginate=paginate)

【day04-models一对多、分页】page.html
Title - 锐客网 {% for stu in stus %} {% endfor %}
ID 姓名 年龄
{{stu.id}} {{stu.s_name}} {{stu.s_age}}
当前{{ paginate.page }}页,共{{ paginate.pages}}页
{% if paginate.has_prev %} 上一页 {% endif %}{% if paginate.has_next %} 下一页 {% endif %}

2 关联关系 2.1创建关联模型 班级模型
class Grade(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) g_name = db.Column(db.Integer, unique=True, nullable=False) students = db.relationship('Students', backref='grade', lazy=True) __tablename__ = 'grade'

注意:表的外键由db.ForeignKey指定,传入的参数是表的字段。db.relations它声明的属性不作为表字段,第一个参数是关联类的名字,backref是一个反向身份的代理,相当于在Student类中添加了grade的属性。例如,有Grade实例dept和Student实例grade。dept.students.count()将会返回学院学生人数; stu.stu.first()将会返回学生的学院信息的Grade类实例。一般来讲db.relationship()会放在一这一边。
lazy
官网解释有如下几个lazy的参数:
lazy 决定了 SQLAlchemy 什么时候从数据库中加载数据:,有如下四个值:
select 就是访问到属性的时候,就会全部加载该属性的数据。
joined 则是在对关联的两个表进行join操作,从而获取到所有相关的对象。
dynamic 则不一样,在访问属性的时候,并没有在内存中加载数据,而是返回一个query对象, 需要执行相应方法才可以获取对象,
2.2 学生模型
id = db.Column(db.Integer, primary_key=True, autoincrement=True) s_name = db.Column(db.String(10), unique=False, nullable=False) s_age = db.Column(db.Integer, default=19) s_g = db.Column(db.Integer, db.ForeignKey('grade.id'), nullable=True) __tablename__ = 'students'def save(self): db.session.add(self) db.session.commit()

通过班级查学生信息
@blue.route('/sel_stu_by_grade') def sel_stu_by_grade(): # 通过班级查找学生 grade = Grade.query.filter(Grade.g_name == '物联网').frist() stus = grade.students return '通过班级查找学生信息'

通过学生查找班级信息
@blue.route('/sel_grade_by_stu/') def sel_grade_by_stu(): stu = Students.query.get(5) # 获取班级,学生对象.backref grade = stu.grade return '通过学生获取班级信息'

    推荐阅读