Flask 框架 :数据库的操作

Flask 框架
数据库的操作

from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy
import pymysql
from sqlalchemy import or_, func

pymysql.install_as_MySQLdb()

app = Flask(__name__)
#指定数据库的配置(连哪个数据库)
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:123456@localhost:3306/flask"
#指定当视图(views函数)执行完毕后,自动提交数据库操作
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
#指定每次执行操作时打印原始的SQL语句
# app.config['SQLALCHEMY_ECHO']=True
#创建数据库的实例
db = SQLAlchemy(app)

#创建实体类
class Users(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(80),nullable=False,unique=True)
    age = db.Column(db.Integer)
    email = db.Column(db.String(120),unique=True)

    def __init__(self,username,age,email):
        self.username = username
        self.age = age
        self.email = email

    def __repr__(self):
        return "<Users:%r>" % self.username

class Student(db.Model):
    __tablename__ = "student"
    id = db.Column(db.Integer,primary_key=True)
    sname = db.Column(db.String(30),nullable=False)
    sage = db.Column(db.Integer)

    def __init__(self,sname,sage):
        self.sname = sname
        self.sage = sage

    def __repr__(self):
        return "<Student:%r>" % self.sname

class Teacher(db.Model):
    __tablename__ = "teacher"
    id = db.Column(db.Integer,primary_key=True)
    tname = db.Column(db.String(30),nullable=False)
    tage = db.Column(db.Integer)
    tbirth = db.Column(db.Date)

    def __init__(self,tname,tage,tbirth):
        self.tname = tname
        self.tage = tage
        self.tbirth = tbirth

    def __repr__(self):
        return "<Teacher:%r>" % self.tname

class Course(db.Model):
    __tablename__ = "course"
    id = db.Column(db.Integer,primary_key=True)
    cname = db.Column(db.String(30),nullable=False)

    def __init__(self,cname):
        self.cname = cname

    def __repr__(self):
        return "<Course:%r>" % self.cname

db.create_all()


@app.route('/01-add')
def add_views():
    #创建Users对象,并插入到数据库中
    users = Users('王老师',35,'mrwang@163.com')
    db.session.add(users)
    db.session.commit()
    return "Add OK"


@app.route('/02-register',methods=['GET','POST'])
def register():
    if request.method == 'GET':
        return render_template('02-register.html')
    else:
        #接收前端传递过来的数据
        uname = request.form.get('uname')
        uage = request.form.get('uage')
        uemail = request.form.get('uemail')
        #将数据构建成实体对象
        user = Users(uname,uage,uemail)
        #将数据保存回数据库
        db.session.add(user)
        # db.session.commit()
        return "Register Success"


@app.route('/03-query')
def query_views():
    # 测试 all() 函数
    # users = db.session.query(Users).all()
    # for u in users:
    #     print('姓名:%s,年龄:%d,邮箱:%s' % (u.username,u.age,u.email))

    # 测试 first() 函数
    # user = db.session.query(Users).first()
    # print(user)

    # 测试查询返回部分列
    # select username,age from users
    # query=db.session.query(Users.username,Users.age)
    # print(query)

    ###################
    # 测试 filter() 函数
    ##################
    # filter() - 查询 Users中年龄大于30的人的信息
    # users=db.session.query(Users).filter(Users.age>30).all()

    # filter() - 查询Users中id大于1并且年龄大于30的人的信息
    # users = db.session.query(Users).filter(Users.age>30,Users.id>1).all()

    #filter() - 查询Users中id为1或者年龄大于30的人的信息
    # users = db.session.query(Users).filter(or_(Users.id==1,Users.age > 30)).all()

    #filter() - 查询Users中id在[2,4]列表中的users的信息
    # users = db.session.query(Users).filter(Users.id.in_([2,4])).all()

    #filter() - 查询Users中age在 45~50之间的人的信息 - between 45 and 50
    # users=db.session.query(Users).filter(Users.age.between(45,50)).all()
    #
    # print(type(users))
    #
    # for u in users:
    #     print("ID:%d,姓名:%s,年龄:%d,邮箱:%s" % (u.id,u.username,u.age,u.email))



    ###########
    # filter_by()
    ##########
    #查询id为1的users的信息
    # user = db.session.query(Users).filter_by(id=1).first()
    # print(user)

    ##########
    # 查询 users 表中的前2条数据
    #########
    # users = db.session.query(Users).limit(2).all()

    # 获取users表中过滤前3条数据后剩余的前2条数据
    # users = db.session.query(Users).limit(2).offset(3).all()


    ###########
    # 先按照年龄降序排序,再按照id升序排序
    ##########
    # users = db.session.query(Users).order_by("age desc,id asc").all()

    ##########
    # 分组查询 - group_by
    #########
    # users = db.session.query(Users.age).group_by('age').all()
    #
    # print(users)

    #########
    # 聚合函数-avg()
    #########
    # result=db.session.query(func.avg(Users.age).label('avgAge')).first()

    # 按年龄进行分组,求组内的年龄的平均值
    # result=db.session.query(Users.age,func.avg(Users.age),func.sum(Users.age)).group_by('age').all()
    # print(result)

    ###########
    # 基于Models进行的查询
    ##########
    # users = Users.query.all()
    # users = Users.query.filter(Users.id > 1).all()
    users = Users.query.filter_by(id=3).all()
    for u in users:
        print("ID:%d,姓名:%s,年龄:%d,邮箱:%s" % (u.id,u.username,u.age,u.email))

    return "<script>alert('Query OK');</script>"

@app.route('/04-queryall')
def queryall():
    users = Users.query.all()
    return render_template('04-queryall.html',users = users)


@app.route('/05-update')
def update_views():
    #接收前端传递过来的参数 id
    id = request.args.get('id')
    #根据id查询出对应的对象
    user=Users.query.filter_by(id=id).first()
    #将查询出来的对象发送到05-update.html中进行显示
    return render_template('05-update.html',user=user)

if __name__ == "__main__":
    app.run(debug=True,host='0.0.0.0')
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值