Flask 模型表操作 单表

Flask 模型表操作 单表

class User(db.Model):
    # 表名
    __tablename__ = 'tb_user'
    # 字段
    id = db.Column(db.Integer, primary_key=True,
                   autoincrement=True)  # 一定要有类型 primary_key=True 主键 autoincrement=True 自动增长
    name = db.Column(db.String(30), unique=True, index=True)
    age = db.Column(db.Integer)
    def __repr__(self):
        return '<User {}>'.format(self.name)

增:添加数据

# 增:添加数据
@blueprints1.route('/adduser/')
def add_user():
    # 添加一条数据
    '''
    模型		  数据库

    类		  表数据

    类属性	  表字段

    一个对象	  表中的一行数据
    '''
    user = User()  # 先生成一个对应表的空对象,可以理解为空记录
    # 往对象中添加对应属性的值,也就是往对应字段中添加对应的值
    user.name = 'kun'
    db.session.add(user)  # 将user对象添加到session中,可以理解为添加到缓存
    db.session.commit()  # 同步到数据库中 这时真正的作用到数据库

    # 同时添加多条数据
    users = []  # 定义一个空列表
    for i in range(10):
        user = User()
        user.name = 'kunkun' + str(i)
        users.append(user)
    try:
        db.session.add_all(users)
        db.session.commit()  # 自带事务提交
    except Exception as e:
        db.session.rollback()  # 回滚
        db.session.flush()  # 清空刷新缓存
        return 'fail ' + str(e)
    return 'success!'

删:删除数据

# 删:删除数据
# 找到要删除的数据,然后删除
@blueprints1.route('/deleteuser/')
def delete_user():
    # 先找到删除的对象(数据)
    user = User.query.first()  # 查询第一条数据
    db.session.delete(user)
    db.session.commit()
    return 'success!'

改:修改数据

# 改:修改数据
# 找到要修改的数据,然后修改
@blueprints1.route('/updateuser/')
def update_user():
    # 先找到修改的对象(数据)
    user = User.query.first()  # 查询第一条数据
    user.name = 'ikun'
    db.session.commit()
    return 'success!'

查:查询数据

查询数据
过滤器
	filter()	把过滤器添加到原查询上,返回一个新查询
    filter_by() 把等值过滤器添加到原查询上,返回一个新查询
	limit()		使用指定的值限制原查询返回的结果数量,返回一个新查询
	offset()	偏移原查询返回的结果,返回一个新查询
	order_by()	根据指定条件对原查询结果进行排序,返回一个新查询
	group_by()	根据指定条件对原查询结果进行分组,返回一个新查询
常用查询
	all()	        以列表形式返回查询的所有结果,返回列表
	first()		   返回查询的第一个结果,如果没有结果,则返回None
	first_or_404()	返回查询的第一个结果,如果没有结果,则终止请求,返回404错误响应
	get()	        返回指定主键对应的行,如果没有对应的行,则返回None
	get_or_404()	返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回404错误响应
    count()		    返回查询结果的数量
    paginate()		返回一个Paginate 对象,它包含指定范围内的结果
查询属性
    contains
    startswith
    endswith
    in_
	__gt__
    __ge__
    __lt__
    __le__
逻辑运算
	与 and_
		filter( and_(条件),条件...)
	或or_
		filter(or_(条件),条件...)
	非not_
		filter(not_(条件),条件...)

# 查:查询数据
# 条件
@blueprints1.route('/selectuser/')
def select_user():
#########################################################################################################################################
    # all():返回所有数据,列表的形式
    users = User.query.all()
    print(users, type(users))
    # [<User ikun>, <User kunkun1>, <User kunkun2>, <User kunkun3>, <User kunkun4>, <User kunkun5>, <User kunkun6>, <User kunkun7>, <User kunkun8>, <User kunkun9>]    <class 'list'>
    print(User.query, type(User.query))
    # SELECT tb_user.id AS tb_user_id, tb_user.name AS tb_user_name FROM tb_user    <class 'flask_sqlalchemy.query.Query'>
#########################################################################################################################################
    # filter():过滤,得到查询集,类似SQL中的where
    users1 = User.query.filter()
    print(users1, type(users1))
    # SELECT tb_user.id AS tb_user_id, tb_user.name AS tb_user_name FROM tb_user  <class 'flask_sqlalchemy.query.Query'>
    print(list(users1))  # 可以用list强制转换
    # [<User ikun>, <User kunkun1>, <User kunkun2>, <User kunkun3>, <User kunkun4>, <User kunkun5>, <User kunkun6>, <User kunkun7>, <User kunkun8>, <User kunkun9>]

    '''
        all 和 filter的区别
        all 查询完之后就是一个列表,不能继续查询
        filter 查询完后是以一个查询集 Query 它还能继续去查询
        这个和django中的orm是一样的只要还是query_set就能继续查询
    '''
#########################################################################################################################################
    # get():得到对应主键值的数据对象
    users2 = User.query.get(8)
    print(users2, type(users2))  # 可以直接得到一个数据对象,也就是对应的一行数据
    # <User kunkun6> <class 'App.models.User'>
    print(users2.name)  # 使用对象点属性的方式获取值
#########################################################################################################################################
    # filter 和 filter_by
    # filter: 类似于SQL中的where
    # filter_by: 用于等值操作的过滤,但是要进行大于,小于,等的非等值操作不能进行,非等值操作只能用filter

    users3 = User.query.filter(User.name == 'ikun')
    # users3 = User.query.filter(User.age > 20)
    print(users3, type(users3))
    # SELECT tb_user.id AS tb_user_id, tb_user.name AS tb_user_name FROM tb_user WHERE tb_user.name = ? <class 'flask_sqlalchemy.query.Query'>
    print(list(users3))  # 因为filter查询到的是一个查询集,所以我们需要list强制转换一下
    # [<User ikun>]

    users4 = User.query.filter_by(name='ikun')
    print(users4, type(users4))  # 同样拿到的也是查询集
    # SELECT tb_user.id AS tb_user_id, tb_user.name AS tb_user_name FROM tb_user WHERE tb_user.name = ? <class 'flask_sqlalchemy.query.Query'>
    print(list(users4))
#########################################################################################################################################
    # first():第一条数据
    # first_or_404():第一条数据,如果不存在则抛出404错误
    users5 = User.query.first()  # 因为是获取一条数据,所以直接得到数据对象
    users6 = User.query.first_or_404()
    print(users6)  # <User ikun>
#########################################################################################################################################
    # count():统计查询集中的数据条数
    # 前提是查询集才可以进行统计
    users7 = User.query.filter().count()
    print(users7)  # 10
#########################################################################################################################################
    # limit():取前几条数据
    # offset():跳过前几条数据
    '''
        一般用于分页器
    '''
    users8 = User.query.offset(3).limit(4)  # 跳过前3条数据,从第4条开始取,取前4条数据
    print(list(users8))
    # [<User kunkun3>, <User kunkun4>, <User kunkun5>, <User kunkun6>]
#########################################################################################################################################
    # order_by():排序
    users9 = User.query.order_by('id')  # 默认升序
    print(list(users9))
    from sqlalchemy import desc
    users10 = User.query.order_by(desc('id'))  # 降序 需要导入desc包
    print(list(users10))
#########################################################################################################################################
    # 逻辑运算:and_,or_,not_
    users11 = User.query.filter(User.age > 20, User.age < 25)  # 默认是和操作
    from sqlalchemy import and_, or_, not_
    # users11 = User.query.filter(and_(User.age > 20, User.age < 25))  # 默认是和操作,但是需要导包,需要同时满足所有条件
    users12 = User.query.filter(or_(User.age < 20, User.age > 25))  # 或 只要满足任何一个条件就可以取到
    users13 = User.query.filter(not_(or_(User.age < 20, User.age > 25)))  # 取反,取不满足条件的,这里会获取20-25之间的数据
#########################################################################################################################################
    # 查询属性
    # contaions():模糊查找,类似SQL中的like
    users14 = User.query.filter(User.name.contaions('k'))  # 类似于SQL中的like 只要带这个值的记录都会被查询出来,返回一个查询集
    print(list(users14))
    # in_():其中之一
    users15 = User.query.filter(User.age.in_([10, 20, 30, 40])) # 只要是等于列表中的任何一个就会查出,返回一个查询集
    # startswith():以xx开头
    # endswith():以xx结尾
    users16 = User.query.filter(User.name.startswith('i'))
    users17 = User.query.filter(User.name.endswith('n'))
    # __gt_:大于
    users18 = User.query.filter(User.age._gt_(25))
    print(list(users18))
#########################################################################################################################################
    return 'sucess!'

本文作者:春游去动物园

本文链接:https://www.cnblogs.com/chunyouqudongwuyuan/p/17522996.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   春游去动物园  阅读(56)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 生分 川青
生分 - 川青
00:00 / 00:00
An audio error has occurred.

生分 - 川青

词:莎子

曲:邵翼天

编曲:林亦

混音:罗杨轩

吉他:林亦

制作人:谢宇伦

监制:曾炜超/陈显

策划:+7

统筹:黄染染

出品:漫吞吞文化

『酷狗音乐人 • 星曜计划』

全方位推广,见证星力量!

「版权所有未经许可 不得商业翻唱或使用」

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到

我们最后友人相称

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言

见缝插针

怕不小心我们

成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到我们最后

友人相称

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡