Flask Model 单表操作-增删改

发布时间 2023-06-02 15:16:51作者: ji哩咕噜
#   增删改查
# 增:添加数据
@blue.route('/useradd/')
def user_add():
    # 添加一条数据
    u = User()
    u.name = 'kun'
    u.age = 25
    db.session.add(u)  # 将u对象添加到session中
    db.session.commit()  # 同步到数据库中
    return '西西'
    
    
    # 同时添加多条数据
    users = []
    for i in range(10,30):
        u = User()
        u.name = '西西' + str(i)
        u.age = i
        users.append(u)
    try:    
        db.session.add_all(users)
        db.session.commit()  # 事务提交
    except Exception as e:
        db.session.rollback()  # 回滚
        db.session.flush()
        return 'fail:' + str(e)
    return '西西'


# 删: 删除数据
#    找到要删除的数据,然后删除
@blue.route('/userdel/')
def user_del():
    u = User.query.first()
    db.session.delete(u)
    db.session.commit()
    
    return '西西'

# 改:修改数据
#    找到要修改的数据,然后修改
@blue.route('/userupdate/')
def user_update():
    u = User.query.first()
    u.age = 100
    db.session.commit()
    return '西西'

单独写查数据

查询数据
    过滤器
        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 对象,它包含指定范围内的结果
        
    查询属性
        
# 查:查询数据
#    条件
@blue.route('/userget/')
def user_get():
    # all(): 返回所有数据,返回列表
    users = Users.query.all()
    print(users, type(users))  # <class 'list'>
    print(User.query, type(User.query))  # <class 'flask_sqlalchemy.query.Query'> sqlalchemy的查询集
    
    # filter(): 过滤,得到查询集
    users = User.query.filter()
    print(users, type(users))  # 查询集
    print(list(users))
    
    # get(): 查询到对应主键的数据对象
    user = User.query.get(8)
    # print(user, type(user))  # User对象 <class 'App.models.User'>
    # print(user.name, user.age)  # 获取数据的属性
    
    # filter() : 类似SQL中的where
    # filter_by() :用于等值操作的过滤
    users = User.query.filter(User.age==20)
    users = User.query.filter_by(age=20)
    users = User.query.filter(User.age>20)  # 可以用于非等值操作
    
    # first() :   第一条数据
    # first_or_404(): 第一条数据,如果不存在则抛出404错误
    user = User.query.first()
    user = User.query.filter_by(age=100).first_or_404()
    print(user)
    
    # count(): 统计查询集中的数据条数
    users = User.query.filter()
    print(users.count())  # 20
    
    # limit(): 前几条
    # offset(): 跳过前几条
    users = User.query.offset(3).limit(4)
    print(list(users))
    
    # order_by(): 排序
    users = User.query.order_by('age')  # 升序
    users = User.query.order_by(desc('age'))  # 降序 需要导入一个包,from sqlalchemy import desc
    
    # 逻辑运算:and_, or_, not_
    users = User.query.filter(User.age>20, User.age<25)  # 且 需要导入包,from sqlalchemy import and_, not_, or_,
    users = User.query.filter(and_(User.age>20, user.age<25))  # 且
    users = User.query.filter(or_(User.age>25, User.age<20))  # 或
    users = User.query.filter(not_(or_(User.age>25, User.age<20)))  # 非
    
    # 查询属性
    # contains('3'): 查询包含3的。模糊查找,类似SQL中的like
    users = User.query.filter(User.name.contains('3'))
    # in_(): 其中之一,查询10,20,30其中之一
    users = User.query.filter(User.age.in_([10,20,30]))
    # startswith():以某子串开头 endswith(): 以某子串结尾 查询冰开头的,冰结尾的
    users = User.query.filter(User.name.startswith('冰'))
    # __gt__: 大于
    users = User.query.filter(User.age.__gt__(25))
 
    print(list(users))
    
    
    
    return 'xixi'