博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python全栈 Web(Flask框架、CRUD、聚合分组)
阅读量:6256 次
发布时间:2019-06-22

本文共 5246 字,大约阅读时间需要 17 分钟。

模型:
 
# 根据现有的表结构构建模型类class Users(db.Model):    __tablename__ = "users"    id = db.Column(db.Integer,primary_key=True)    username = db.Column(db.String(80),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 "
" % self.username
插入
 具体信息在上一篇博客
# 强制删除所有模型对应的表db.drop_all()# 将所有模型映射到数据库db.create_all()# 向表中插入一条记录@app.route('/insert')def insert_views():    user = Users('Paris',18,'Paris@gmail.com')    db.session.add(user)    return "Insert OK"
FlASK-SQLAlchmey  查询:
基于db.session  进行查询
db.session.query()
可以有多个参数,参数表示要查询那个实体
该函数会返回一个query对象  包含了指定实体类对应的表中所有的数据
查询执行函数:
在查询的基础上得到最终想要的结果
语法:
db.session.query(...).查询执行函数
all()
以列表的方式返回查询的所有结果
first()
返回查询结果中的第一个结果 没有返回None
first_or_404()
返回查询第一个结果如果没有终止并返回404
count()
返回查询结果的数量
过滤器函数:
filter()
按照指定条件进行过滤(多表,单表,定值,不定值)
filter_by()
按照等值条件进行过滤
limit()
按照限制行数获取查询结果
order_by()
按照指定条件进行排序
group_by()
根据指定条件进行分组
示例:
查询所有 年龄大于30的信息
db.session.query(Users).filter(Users.age>30).all()
条件必须有模型.属性  来组成
查询所有 年龄大于30或者id大于5的信息
要借助于 or_() 函数
db.session.query(Users).filter(or_(Users.age>30, Users.id>5)).all()
查询所有 年龄大于30并且小于50的信息
db.session.query(Users).filter(Users.age>30, Users.age<50).all()
查询所有  年龄等于30 的信息
db.session.query(Users).filter(Users.id==5).all()
查询所有  username中含有“w”的用户信息
db.session.query(Users).filter(Users.username.like("%w%")).all()
查询所有  id在  1~3之间的user信息
要借助于 in_() 函数
db.session.query(Users).filter(Users.id.in_([1, 2, 3])).all()
查询id=5的信息
db.session.query(Users).filter_by(id=5).first()
获取前5条数据
db.session.query(Users).limit(5).all()
获取从2开始的前5条数据
db.session.query(Users).limit(5).offset(2).all()
对Users表中按照id倒叙排序
db.session.query(Users).order_by("id desc").all()
多级排序逗号隔开
db.session.query(Users).order_by("id desc, age asc").all()
基于Models 进行查询
Models.query.查询过滤器(条件参数).查询执行函数
Users.query.filter(Users.id>3).all()
# 查询路由@app.route('/query')def query_views():    # 测试查询    print(db.session.query(Users))    print(db.session.query(Users.username,Users.email))    print(db.session.query(Users,Course))    # 通过查询执行函数获得最终查询结果    # all() : 得到查询中所有的结果    users = db.session.query(Users).all()    for u in users:        print(u.username,u.age,u.email)    # first() : 得到查询中的第一个结果    user = db.session.query(Users).first()    print(user.username,user.age,user.email)    course = db.session.query(Course).first()    print(course)    # 使用查询过滤器函数对数据进行筛选    # 查询年龄大于30的Users的信息    users = db.session.query(Users).filter(Users.age>30).all()    print(users)    # 查询年龄大于30并且id大于5的Users的信息    users = db.session.query(Users).filter(Users.age>30,Users.id > 5).all()    print(users)    # 查询年龄大于30 或者 id大于 5 的Users的信息    users = db.session.query(Users).filter(or_(Users.age>30,Users.id > 5)).all()    print(users)    # 查询email中包含字符'w'的用户的信息    users = db.session.query(Users).filter(Users.email.like('%w%')).all()    print(users)    # 查询id在1,2,3 之间的 用户的信息    users = db.session.query(Users).filter(Users.id.in_([1,2,3])).all()    print(users)    # 查询 Users 表中所有数据的前3条    users = db.session.query(Users).limit(3).all()    users = db.session.query(Users).limit(3).offset(1).all()    # 查询Users表中所有的数据,并按照id倒叙排序    users = db.session.query(Users).order_by('id desc,age asc')    print(users)    # 查询Users表中所有的数据,并按照 age 进行分组    users = db.session.query(Users).group_by('id').all()    print(users)    # 基于Models实现的查询 : 查询id>3的所有用户的信息    users = Users.query.filter(Users.id>3).all()    print(users)    return "Query OK"
FLASK-SQLAlchemy  删除 和 修改
删除:
1.查询出要删除的实体
user = db.session.query(Users).filter_by(id=5).first()
2.根据所提供的删除方法将信息删除
db.session.delete(user)
@app.route('/delete_user')def delete_user():    # 查询并去除id=5的第一条记录    user = Users.query.filter_by(id=5).first()    # 将改记录删除    db.session.delete(user)    return 'Delete OK'
修改:
1.查
user = Users.query.filter_by(id=1).first()
2.改
user.username = "巴黎"
3.保存
db.session.add(user)
@app.route('/update_user')def update_user():    # 查询id=1的第一条记录并取出    user = Users.query.filter_by(id=1).first()    # 将username改为巴黎    user.username = "巴黎"    # 将年龄改为17    user.age = 17    # 将数据重新插入回数据库  如果该数据纯在则更新如果不存在则创建    db.session.add(user)    return "Update OK"
FLASK-SQLAlchemy - 关系映射
一对多:
在“多”实体中增加
外键类名 = db.Column(db.Integer, db.ForeignKey(主表.主键))
在“一”的实体中正价反向引用关系
属性名 = db.relationship(“对应的“多”实体类名”, backref="属性名", lazy="dynamic")
class Course(db.Model):    __tablename__ = "course"    id = db.Column(db.Integer,primary_key=True)    cname = db.Column(db.String(30))    #反向引用:        # 返回与当前课程相关的teacher列表    #backref:        # 定义反向关系,本质上会向Teacher实体中增加一个        # course属性.该属性可替代course_id来访问        # Course模型.此时获得到的是模型对象,而不是外键值    teachers=db.relationship('Teacher',backref='course')    def __init__(self,cname):        self.cname = cnameclass Teacher(db.Model):    __tablename__='teacher'    id = db.Column(db.Integer,primary_key=True)    tname = db.Column(db.String(30))    tage = db.Column(db.Integer)    # 增加一列 : course_id,外键列,要引用自主键表(course)的主键列(id)    course_id = db.Column(db.Integer,db.ForeignKey('course.id'))    def __init__(self,tname,tage):        self.tname = tname        self.tage = tage    def __repr__(self):        return "
" % self.tname

转载地址:http://mexsa.baihongyu.com/

你可能感兴趣的文章
个人考场VIM配置
查看>>
adobe
查看>>
微信小程序中的分享事件
查看>>
HDU 6069 Counting Divisors【区间素筛】【经典题】【好题】
查看>>
使用HAXM为QEMU for Windows加速
查看>>
配置tomcat下war包可以自压缩
查看>>
idea中artifacts、facets、modules是什么意思?
查看>>
大数据下的Distinct Count(一):序
查看>>
android 打包
查看>>
FUCKED-BUG之临时对象的生死
查看>>
一句话开启XP_CMDSHELL
查看>>
【100题】第四十五题 雅虎面试两道题(矩阵判断、数组划分)
查看>>
MySQL基础知识
查看>>
HTML页面优化
查看>>
centos6下安装docker
查看>>
常见的算法PHP 版,自整理
查看>>
使用UITableView隐藏的复选功能
查看>>
自定义下拉菜单(按钮下面出现下拉菜单),失去焦点后,如何下拉菜单自动消失,以及弹出窗体位置一直变化问题...
查看>>
uboot指令和环境变量
查看>>
Python之模块(二)
查看>>