首页 > 其他分享 >14、flask-模型-models-表的操作-增删改查

14、flask-模型-models-表的操作-增删改查

时间:2024-07-27 14:50:57浏览次数:18  
标签:__ 14 flask 改查 查询 user query users User

1.单表操作

1.修改表结构

接着上一步的数据迁移后、生成了表,接下来就要对表的操作

这里稍微对表结构改了一下
models.py

from .exts import db    #导入db对象

class User(db.Model):
    # 表名
    __tablename__ = 'user'
    # 字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True)
    age = db.Column(db.Integer, default=1)

注意:修改表结构需要重新做数据迁移的操作:

1.flask db migrate
2.flask db upgrade

2.增加数据

from flask import Blueprint
from .models import *

#创建蓝图(路由)
blue = Blueprint('user', __name__)

@blue.route('/')
def index():
    return 'index'


# 创建对象: 对象名(自定义) = 类名()     -- > 该对象指的是models中的类
# 对象.属性名 = 表字段的值

# 单表操作 - 增删改查
# 1.增
@blue.route('/useradd/')
def user_add():
    # #添加一条数据
    # # 创建对象
    # user = User()
    # user.name = '张三'
    # user.age = 18
    # db.session.add(user)    #将对象user添加到session中
    # db.session.commit()     #将session中的数据提交到数据库中

    #添加多条数据
    users = []
    for i in range(10, 30):
        user = User()
        user.name = '张' + str(i)
        user.age = i
        users.append(user)

    try:
        db.session.add_all(users)    #将对象user添加到session中, all添加多个对象
        db.session.commit()     #将session中的数据提交到数据库中  事务提交
    except Exception as e:
        db.session.rollback()   #回滚
        db.session.flush()  #清空session
        return '添加失败' + str(e)
        #因为这里name是唯一值、所以如果重复添加会报错,将错误打印出来
        # 添加失败(sqlite3.IntegrityError) UNIQUE constraint failed: user.name [SQL: INSERT INTO user (name, age) VALUES (?, ?) RETURNING id] [parameters: ('张10', 10)] (Background on this error at: https://sqlalche.me/e/20/gkpj)
    return '添加成功'

3.删除数据

from flask import Blueprint
from .models import *

#创建蓝图(路由)
blue = Blueprint('user', __name__)

@blue.route('/')
def index():
    return 'index'


# 创建对象: 对象名(自定义) = 类名()     -- > 该对象指的是models中的类
# 对象.属性名 = 表字段的值

# 2.删
# 先查到要删除的数据,再执行删除
@blue.route('/userdel/')
def user_del():
    # 先查到要删除的数据
    user = User.query.first()   #查询第一条数据
    db.session.delete(user)
    db.session.commit()

    return '删除成功'

3.改

# 3.改
@blue.route('/userupdate/')
def user_update():
    # 先查到要修改的数据
    user = User.query.first()
    user.age = 200
    db.session.commit()
    return '修改成功'

4.查询

  • 查询数据常用属性
  1. 过滤器
方法名 说明
filter() 把过滤器添加到原查询上,返回一个新的查询
filter_by() 把等值过滤器添加到原查询上,返回一个新查询
limit() 使用指定的值限制原查询返回的结果数量,返回一个新查询
offset() 偏移原查询返回的结果、返回一个新的查询
order_by() 根据指定条件对原查询结果进行排序、默认升序、降序需要导入from sqlalchemy import desc
group_by() 根据指定条件对原查询结果进行分组
  1. 常用查询
方法名 说明
all() 以列表形式返回查询的所有结果、返回列表
first() 返回查询的第一个结果、如果没有结果返回 None
first_or_404() 返回查询的第一个结果、如果没有结果、则终止请求、返回404错误响应
get() 返回指定主键对应的行、如果没有对应的行、则返回None
get_or_404() 返回指定主键对应的行、如果没有找到指定的主键、则终止请求、返回404错误响应
count() 返回查询结果的数量
paginate() 返回一个Paginate对象、他包含指定范围内的结果 - 一般做翻页
  1. 查询属性
属性名 说明
contains() 模糊查询
startswith() 查询以什么开头的
endswitch() 查询以什么结尾的
in_ 查找在列表中的数据
__gt__ 大于
__ge__ 大于等于
__lt__ 小于
__le__ 小于等于
  1. 逻辑运算

需要导入:from sqlalchemy import and_, or_, not_

  • 与 and_ :filter(and_(条件),条件...)
  • 或 or_ : filter(or_(条件),条件...)
  • 非 not_ : filter(not_(条件),条件)

案例如下:

```plaintext
from flask import Blueprint
from sqlalchemy import desc, and_, or_, not_

from .models import *

#创建蓝图(路由)
blue = Blueprint('user', __name__)

@blue.route('/')
def index():
    return 'index'


# 创建对象: 对象名(自定义) = 类名()     -- > 该对象指的是models中的类
# 对象.属性名 = 表字段的值

# 4.查
@blue.route('/userget/')
def user_get():
    # all(): 查询所有数据
    users = User.query.all()    #查询所有数据
    # print(users)    #打印的是对象、如果models中有__repr__方法,打印的是对象的属性值、如果没有__repr__方法,打印的是对象的内存地址
    # print(User.query)   #打印的是sql语句

    # filter(): 过滤, 过滤条件,类似where 、支持链式查询、得到的是查询集
    users = User.query.filter()
    # print(users)

    # get(): 根据主键查询、如果没有找到,返回None、
    user = User.query.get(10)
    # print(user)
    # print(user.name, user.age)  # 打印对象的属性值


    # filter()与filter_by()的区别
    # filter()  # 类似where、支持不等值的条件查询、但条件要:对象.属性名
    # filter_by()   #用于等值 = 操作的过滤条件,而不支持 > < 等不等值的条件查询

    # users = User.query.filter(User.age==18)   #
    #users = User.query.filter(User.age>18)     #返回的是查询集

    users = User.query.filter_by(age=18)        #可以直接属性值查询
    # users = User.query.filter_by(age>18)      #这是不支持的所以会报错
    # print(list(users))  # 打印查询集使用list()强转打印


    # first(): 查询第一条数据
    # last(): 查询最后一条数据
    user = User.query.first()
    # user = User.query.last()
    user = User.query.first_or_404()
    print(user.name, user.age)


    # count(): 查询数据条数
    count = User.query.count()
    print(count)

    # 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
    print(list(users))

    # 逻辑运算 and_ , or_ , not_
    users = User.query.filter(User.age>20, User.age<30) # 且运算
    users = User.query.filter(and_(User.age>20, User.age<30))
    users = User.query.filter(or_(User.age>20, User.age<30))
    users = User.query.filter(not_(User.age>20))
    print(list(users))

    # 查询属性
    users = User.query.filter(User.name.contains('张'))  # 模糊查询 类似 like
    # in_() : 查询属性
    users = User.query.filter(User.name.in_(['张三', '李四']))  # 查找在列表中的数据
    # startswith(): 查询以什么开头的数据
    users = User.query.filter(User.name.startswith('张'))
    # endswith(): 查询以什么结尾的数据
    users = User.query.filter(User.name.endswith('三'))

    # __gt__: 大于
    # __lt__: 小于
    # __ge__: 大于等于
    # __le__: 小于等于
    users = User.query.filter(User.age.__gt__(20))
    users = User.query.filter(User.age.__ge__(20))
    users = User.query.filter(User.age.__le__(20))
    print(list(users))
    
    return '查询成功'

标签:__,14,flask,改查,查询,user,query,users,User
From: https://www.cnblogs.com/littlecc/p/18326488

相关文章

  • 如何将flask应用程序分成多个py文件?
    我的Flask应用程序当前由一个具有多个路径的文件组成,并定义了路径。有什么方法可以创建一个test.py文件,其中包含main()中未处理的路由吗?test2.py我担心test.py中的路由太多,并且希望使其可以[email protected]('/somepath')defsomehandler(......
  • Ubuntu14.04QT程序开机自启动(转)
     按语:    linux应用程序设为开机自启动,可修改/etc/rc.local中添加启动代码,但QT应用程序无法自动启动,后参考此文,添加应用(原来做好的desktop文件),成功。1.运行已经编辑好的QT程序,run、debug,生成类似于build-qtplot-Desktop-Debug的文件,当然程序在编译时会显示该debu......
  • 使用 Flask 时,为什么这个 html 模板不能在 Web 浏览器中呈现抓取的网站数据?
    每当我在终端中打印出抓取的数据时,它都会很好地显示抓取的数据,但每当我尝试使用PythonFlask提供它时,我使用的HTML模板不会在Web浏览器中呈现数据。如果您能帮我修复此代码。Python(Flask)文件:fromflaskimportFlask,render_templatefrombs4importBeautifulSoup......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......
  • python+flask计算机毕业设计外卖食品安全监管微信小程序(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,外卖行业作为“互联网+餐饮”的典范,近年来呈现出井喷式增长态势,极大地便利了人们的日常生活。然而,外卖食品......
  • python+flask计算机毕业设计楼盘销售系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着房地产市场的蓬勃发展,楼盘销售作为房地产行业的重要环节,其管理效率与服务质量直接影响到企业的市场竞争力和客户满意度。传统的楼盘销......
  • python+flask计算机毕业设计基于web的小区疫情防控信息管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,特别是新冠疫情的持续影响,小区作为城市管理的基础单元,其疫情防控工作显得尤为重要。传统的小区管理方式在面对......
  • Flask启用https
    1.生成或获取SSL证书使用openssl生成自签名证书#req-x509生成自签名证书#-newkeyrsa:4096生成一个新的私钥,指定为4096位的RSA密钥对#-keyoutkey.pem私钥保存到key.pem文件#-outcert.pem自签名证书保存到cert.pem文件#-days365证书的......