flask - 创建表格及表格的增删查


概述

  1. 创建表格模型
  2. 提交表格模型到数据库
  3. 实现表格的增删查功能

  1. 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
    
  2. 创建表格模型到数据库

    
    # 创建表格到数据库(全部模型)
    
    @stu.route('/createdb/')
    def create_db():
    
        db.create_all()
    
        return '数据表创建成功'
    
        # 删除数据库表格(全删)
        @stu.route('/dropdb/')
        def drop_db():
    
            db.drop_all()
    
            return '删除数据库表格成功'
  3. 向表格中添加数据

    向课程表中添加数据

    
    
    #添加课程
    
    @stu.route('/addcourse/')
    def add_course():
    
        course_list = []
        courses = ['python', 'c++', 'java', 'HTML', 'jS']
        方式1for 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个学生成功'
    
  4. 查询学生

    
    
    @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))
    
    
    # 年龄等于16120342332
    
    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)

猜你喜欢

转载自blog.csdn.net/hello_syt_2018/article/details/80371860