• Flak-SQLAlchemy的使用


    安装

    pip install flask-sqlalchemy
    

    文档

    Flask-SQLAlchemy — Flask-SQLAlchemy 2.0 documentation (pythondoc.com)http://www.pythondoc.com/flask-sqlalchemy/index.html组件初始化

    基本配置

    • flask-sqlalchemy 的相关配置也封装到了 flask 的配置项中, 可以通过app.config属性 或 配置加载方案 (如config.from_object) 进行设置
    • 配置详情

    配置 — Flask-SQLAlchemy 2.0 documentation (pythondoc.com)http://www.pythondoc.com/flask-sqlalchemy/config.html#id2

    数据库URI(连接地址)格式: 协议名://用户名:密码@数据库IP:端口号/数据库名,如:
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test31'

    需要注意的是,如果连接的是MySQL数据库,则协议名需要改为mysql+pymysql:

    如:

    'mysql+pymysql://root:1234@127.0.0.1/jsonflow?charset=utf8mb4'

    创建模型类

    • flask-sqlalchemy 的关系映射和 Django-orm 类似:
      • 类 对应 表
      • 类属性 对应 字段
      • 实例对象 对应 记录

    注意点:

    • 模型类必须继承 db.Model, 其中 db 指对应的组件对象
    • 表名默认为类名小写, 可以通过 __tablename__类属性 进行修改
    • 类属性对应字段, 必须是通过 db.Column() 创建的对象
    • 可以通过 create_all() 和 drop_all()方法 来创建和删除所有模型类对应的表
      • 可以使用Flask-Migrate扩展解决该问题

    常用的字段类型

    常用的字段类型

    常用的字段选项

    primary_key         如果设为 True,这列就是表的主键
    unique                  如果设为 True,这列不允许出现重复的值
    index                   如果设为 True,为这列创建索引,提升查询效率
    nullable                如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值
    default                 为这列定义默认值
    doc                      字段说明 

    模型例子

    1. class User(db.Model):
    2. __tablename__ = 't_user' # 设置表名, 表名默认为类名小写
    3. id = db.Column(db.Integer, primary_key=True) # 设置主键, 默认自增
    4. name = db.Column('username', db.String(20), unique=True) # 设置字段名 和 唯一约束
    5. age = db.Column(db.Integer, default=10, index=True) # 设置默认值约束 和 索引

    查询 

    在Flak-SQLAlchemy中,查询操作是通过query对象操作数据。

    以User模型为例

    • 查询全部
    User.query.all()
    • 带条件的查询
    1. User.query.filter_by(age=18).all()
    2. User.query.filter(age==18).all()

    需要注意的是,filter查询更适合复杂查询,如模糊查询、多条件查询等。

    • 多条件查询
    1. from sqlalchemy import and_,or_
    2. User.query.filter(and_(User.name=="user", User.age==18)).all()
    3. User.query.filter(or_(User.name=="user", User.age==18)).all()

    and_表示括号内的表达式都要满足

    or_表示括号内的表达式满足任意一个即可

    • 模糊查询
    1. User.query.filter(User.username.like('jingqi')).all())
    2. User.query.filter(User.username.notlike('jingqi%')).all()

     like表示包含

    notlike表示不包含

    %表示任意多个字符

    _表示任意一个字符

    • 主键查询
    User.query.get(1)

    表示获取id为1的数据

    • 限制查询结果的数据
    1. User.query.filter(User.username!='jingqi').limit(2).all()
    2. User.query.filter(User.username!='jingqi').offset(2).all()
    3. User.query.filter(User.username!='jingqi').slice(2,3).all()

    limit:可以限制每次查询的时候只查询几条数据。

    offset:可以限制查找数据的时候过滤掉前面多少条

    slice(start,stop)方法表示切片操作。也可以使用[start:stop]的方式来进行切片操作,开发中常用的是中括号进行切片

    • 对字段中的json数据进行查询
    bus_query.filter(Business.content.op('->>')('$.GnypMain[0].receipt_date')

     其中bus_query和Business都是模型类,而content是json字段名。

    • 更多查询操作

    (1条消息) flask数据库sqlalchemy查询_月疯的博客-CSDN博客_flask sqlalchemy查询https://blog.csdn.net/chehec2010/article/details/121921037

    增删改 

    在Flak-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。 

    会话用db.session表示。在准备把数据写入数据库前,需要先将数据添加到会话中然后调用commit()方法提交会话。

    1. user = User()
    2. user.username = 'fuyong'
    3. user.password = '123'
    4. # 将新创建的用户添加到数据库会话中
    5. db.session.add(user)
    6. # 将数据库会话中的变动提交到数据库中, 如果不commit, 数据库中是没有变化的.
    7. db.session.commit()

     删

    1. # 获取用户对象
    2. user = User.query.filter_by(id=1).first() #查询出id=1的用户
    3. # 删除用户
    4. db.session.delete(user)
    5. #提交数据库会话
    6. db.session.commit()

    1. # 获取用户对象
    2. user = User.query.filter_by(id=2).first()
    3. # 直接赋值更新数据
    4. user.password = '123567'
    5. #提交数据库会话
    6. db.session.commit()

  • 相关阅读:
    国家地区简码手机号中文名对应表
    VR全景数字工厂,制造业企业线上营销新助手
    多线程编程和网络编程入门
    Android 9.0 屏蔽设备的WLAN功能
    Redis之cluster集群
    合并后的以太坊会像一个流域
    java反序列化CC1
    LeetCode:689. 三个无重叠子数组的最大和(dp C++)
    瑞芯微 RK1126 平台编译zlib gpac 使用GPAC将H264 H265保存为MP4文件 录像
    HTML5学习系列之简单使用1
  • 原文地址:https://blog.csdn.net/HHYZBC/article/details/126803716