概述
- 创建表格模型
- 提交表格模型到数据库
- 实现表格的增删查功能
flask - 创建表格模型
# 创建学生表模型 from datetime import datetime from flask_sqlalchemy import SQLALchemy db = SQLALchemy() class Student(db.Model): s_id = db.Column(db.Integer, primary_key=True, autoincrement=True) s_name = db.Column(db.String(20), unique=True) s_age = db.Column(db.Integer, default=18) __tablename__ = 'student' def __init__(self, name, age): self.s_name = name self.s_age = age # 创建班级表模型 class Grade(db.Model): # 自增, flask 中不能自动创建id,要自己创建 g_id = db.Column(db.Integer, primary_key=True, autoincrement=True) g_name = db.Column(db.String(10), unique=True) # nullable 空 g_desc = db.Column(db.String(100), nullabel=True) # datetime.now 获得当前时间 g_time = db.Column(db.Date, default=datetime.now) # 如果表格名称和定义的模型名称一样,这句话是不用写的,项目会自动创建一个与模型同名,且全为小写的表格名称 __tablename__ = 'grade' # 给模型传值的时候用的,代替了 stu=Student() stu.s_name = name 直接可以使用 stu = Student(name) def __init__(self, name, desc): self.g_name = name self.g_desc = desc # 创建课程表模型 class Course(db.Model): c_id = db.Column(db.Integer, primary_key, autoincrement=True) c_name = db.Column(db.String(10), unique=True) def __init__(self, name): self.c_name = name
创建表格模型到数据库
# 创建表格到数据库(全部模型) @stu.route('/createdb/') def create_db(): db.create_all() return '数据表创建成功' # 删除数据库表格(全删) @stu.route('/dropdb/') def drop_db(): db.drop_all() return '删除数据库表格成功'
向表格中添加数据
向课程表中添加数据
#添加课程 @stu.route('/addcourse/') def add_course(): course_list = [] courses = ['python', 'c++', 'java', 'HTML', 'jS'] 方式1: for i in range(5): course = Course(course[i]) course_list.append(course) 方式2:列表是可以迭代的 for course in courses: cou = Course(course) course_list.append(cou) db.session.add_all(course_list) db.session.commit() return '添加课程成功'
给数据库表格添加单个学生
@stu.route('/createstu/') def create_stu(): if request.method == 'GET': return render_template('create_stu.html') if request.method == 'POST': # input 标签中的 name= 'username' username = request.form.get('username') age = request.form.get('age') # 创建学生对象 stus = Student(username, age) db.session.add(stus) # 把学生对象存到session db.session.commit() # 提交session中的对象到数据库表格 return '创建学生成功'
向数据库表格中添加多个学生
@stu.route('/createstus/', methods=['GET', 'POST']) def create_stus(): if request.method == 'GET': return render_template('create_stus.html') if request.method == 'POST': stu_list = [] # 模板中在一个form下 写了四个input标签 request请求可以通过input标签的name的值 获得input标签value 的值 username1 = request.form.get('username1') age1 = request.form.get('age1') username2 = request.form.get('username2') age2 = request.form.get('age2') stu1 = Student(username1, age1) stu2 = Student(username2, age2) stus_list.append(stu1) stus_list.append(stu2) db.session.add_all(stus_list) db.session.commit() return '创建多个学生成功'
随机创建多个学生
@stu.route('/createstubyrange/') def create_random_stus(): stus_list = [] for i in range(20): stu = Student('杨幂%d'%random.randrange(1000), '%d'%random.randrange(30)) stu_list.append(stu) db.session.add_all(stu_list) db.session.commit() return '添加20个学生成功'
查询学生
@stu.route('/selectstu/') def select_stu(): # 年龄小于16岁的学生 stus = Student.query.filter(Student.s_age < 16) stus = Student.query.filter(Student.s_age.__lt__(16)) # 年龄小于等于16岁的学生 stus = Student.query.filter(Student.s_age.__le__(16)) # 年龄大于24的学生 stus = Student.query.filter(Student.s_age.__gt__(24)) # 年龄大于等于24的学生 stus = Student.query.filter(Student.s_age.__ge__(24)) # 年龄等于16,1, 20, 34, 23, 32 stus = Student.query.filter(Student.s_age.in_([16,1,20,34,23,32])) # 获取所有学生的信息 stus = Student.query.all() sql = 'select * form student;' stus = db.session.execute(sql) # 按照id降序排列,获取全部学生对象 stus = Student.query.order_by('-s_id') # 按照id降序排列, 获取前三条 stus = Student.query.order_by('-s_id').limit(3) # 获取年龄最大的一个 stus = Student.query.order_by('-s_id').first() # 从获取记录的第三条记录开始 位置从0开始 查询5条记录 stus = Student.query.order_by('-s_id').offset(2).limit(5) # 获取id等于63的学生 stus = Student.query.filter(Student.s_id==63).first() stus = Student.query.get(63) # get就是专门根据id,获得单条对象 # 查询多个条件 stus = Student.query.filter(Student.s_age==24, Student.s_name='迪丽热巴') # and_ 并且条件 括号中可以写多个条件 stus = Student.query.filter(and_(Student.s_age==24, Student.s_name=='雅典娜')) # or_ 或者条件 括号中可以写多个条件 stus = Student.query.filter(or_(Student.s_age==24, Student.s_name=='迪丽热巴')) # not_ 非 括号中只能写一个条件 stus = Studnet.query.filter(not_(Student.s_age==28)) return render_template('student_list.html', stus=stus)