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 - 锐客网
ID
姓名
年龄
{% for stu in stus %}
{{stu.id}}
{{stu.s_name}}
{{stu.s_age}}
{% endfor %}
当前{{ 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 '通过学生获取班级信息'
推荐阅读
- 一个人的碎碎念
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- Shell-Bash变量与运算符
- 清明,是追思、是传承、是感恩。
- 牛人进化+|牛人进化+ 按自己的意愿过一生
- 七老修复好敏感、角质层薄、红血丝
- 华为旁!大社区、地铁新盘,佳兆业城市广场五期!
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 螃蟹和这些食物同吃,轻则腹泻、重则中毒!要小心哦~
- 八、「料理风云」