首页 > 其他分享 >Flask 模型表操作 单表

Flask 模型表操作 单表

时间:2023-07-03 15:35:46浏览次数:36  
标签:Flask 模型 User filter user query 查询 tb 单表

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!'

标签:Flask,模型,User,filter,user,query,查询,tb,单表
From: https://www.cnblogs.com/chunyouqudongwuyuan/p/17522996.html

相关文章

  • CSS学习笔记2-CSS的继承_层叠_类型和CSS盒子模型
    1CSS属性继承CSS的某些属性具有继承性(Inherited):如果一个属性具备继承性,那么在该元素上设置后,它的后代元素都可以继承这个属性;当然,如果后代元素自己有设置该属性,那么优先使用后代元素自己的属性(不管继承过来的属性权重多高);如何知道一个属性是否具有继承性呢?......
  • Flask模型Model-数据迁移
    Flask模型Model-数据迁移数据迁移详细步骤: 1.安装好数据迁移的包flask-sqlalchemy和flask-migrate 2.在exts.py中初始化Migrate和SQLAlchemy 3.在models中定义好模型 4.在views.py中一定要导入models模块 from.modelsimport* 5.配置好数据库(sqlite3或MySQL) 6.执......
  • Flask SQLALCHEMY Model 模型
    FlaskSQLALCHEMYModel模型classPerson(db.Model): __tablename__='person' id=db.Column(db.Integer,primary_key=True) name=db.Column(db.string(16),unique=True) def__repr__(self):return'<User{}>'.format(self......
  • Flask SQLAlchemy配置
    FlaskSQLAlchemy配置Flask模型Flask默认并没有提供任何数据库操作的API我们可以选择任何适合自己项目的数据库来使用Flask中可以自己的选择用原生语句实现功能,也可以选择ORM(SQLAlchemy,MongoEngine)原生sQL缺点代码利用率低,条件复杂代码谐句越长,有很多相似语句......
  • 11.7 异常处理模型
    demo1这种模型,开发中经常用classMyMath{ publicstaticintdiv(intx,inty)throwsException{ //异常抛出 inttemp=0; System.out.println("***【START】除法计算开始***"); //开始提示信息 try{ temp=x/y; }catch(Exceptione)......
  • Django:单表查询之神奇的双下划线
    一、单表查询中双下划线运用案例models.Tb1.objects.filter(id__lt=10,id__gt=1)、#获取id大于1且小于10的值models.Tb1.objects.filter(id__in=[11,22,33])#获取id等于11、22、33的数据models.Tb1.objects.exclude(id__in=[11,22,33])#notinmodels.Tb1.objec......
  • Python潮流周刊#9:如何在本地部署开源大语言模型?
    你好,我是猫哥。这里每周分享优质的Python及通用技术内容,部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)首发于我的博客:https://pythoncat.top/posts/2023-07-01-weekly周刊的投稿通道已开放,请在Github项目中提交issue:https://github.c......
  • 9.模型优化
    模型三角形数量增加增加模型三角形数量目的是使模型表面更加光滑调整三角形的位置路普细分LoopSubdivis一个三角形拆成4个loop不是循环细分如何调整细分后的三角形的位置?(为了让细分后的平面变平滑)新的细分点在路普细分中,假定两个相邻三角形中下图白色点为相邻......
  • 98位企业技术高管入学百度AICA 大模型带来AI人才三大能力要求
    2023年6月30日,由深度学习技术及应用国家工程研究中心与百度联合创办的AICA首席AI架构师培养计划,迎来第7期开学典礼。98位企业CTO、科学家以及技术高管学员从500多位报名者中脱颖而出,将开展为期半年的人工智能前沿技术与应用的学习实践,成为各行业领域大模型产业落地的领军人才。A......
  • LLaMA模型微调版本 Vicuna 和 Stable Vicuna 解读
    Vicuna和StableVicuna都是LLaMA的微调版本,均遵循CCBY-NC-SA-4.0协议,性能方面Stable版本更好些。CCBY-NC-SA-4.0是一种知识共享许可协议,其全称为"署名-非商业性使用-相同方式共享4.0国际"。即用的时候要署名原作者,不能商用,下游使用也必须是相同的共享原则。VicunaVicuna(小羊驼......