• flask-sqlalchemy 增删改查


    1. 查询

    1.1模型类.query.fillter_by与模型类.query.fillter区别

    模型类.query.fillter_by(字段名=值) 里面是布尔的条件   这个无法实现复杂查询

    模型类.query.fillter(模型类.字段名==值) 里面是布尔的条件   【常用】

    模型类.query.fillter(模型类.字段名.endswith('z')).all() 等价于 select * from user where 字段名 like '%z';

    模型类.query.fillter(模型类.字段名.startswith('z')).all() 等价于 select * from user where 字段名 like 'z%';

    模型类.query.fillter(模型类.字段名.contains('z')).all() 等价于 select * from user where 字段名 like '%z%';

    模型类.query.fillter(模型类.字段名.like('%z%')).all() 等价于 select * from user where 字段名 like '%z%';

    模型类.query.fillter(模型类.字段名.in_(['a','b','c'])).all() 等价于 select * from user where 字段名  in ('a','b','c');

    模型类.query.fillter(模型类.字段名.between(开始,结束)).all() 等价于 select * from user where 字段名  between 开始 and  结束;

    2 order by排序

    模型类.query.order_by (模型类.字段名.desc()).all() 等价于 select * from user order by 字段名 desc;

    模型类.query.order_by (模型类.字段名.desc()).all() 等价于 select * from user order by 字段名 desc;

    模型类.query.order_by (模型类.字段名).limit(2).all() 等价于 select * from user where  字段名=值 order by 字段名 limit(2);

    跳过前2位再取值前两位 就是3、4

    模型类.query.order_by (模型类.字段名).offset(2).limit(2).all() 

    1. 跟新

     student = Student.query.filter(Student.id == 4).first()

        student.name "小白"

    db.session.commit()

    跟新多条数据

    @app.route("/update2")

    def update2():

        """直接根据条件更新一条或多条数据"""

        Student.query.filter(Student.name == 'zhang', Student.money == -99.00).update({'money': 1998})

        db.session.commit()

        return "ok"

    1. 插入

    # 插入行

    admin_role = Role(name='admin')

    user_role= User(username='hyp', role=admin_role)

    # 对数据库的改动童年过数据库会话管理,在Flask-SQLAlchemy中,会话由 db.session 表示。在写入数据库之前,要先添加到会话中:db.session.add(admin_role)

    db.session.add(user_role)# 或者db.session.add_all([admin_role, user_role])

    # 为了写入数据库,要调用 commit()方法提交会话:db.session.commit()

    1. 删除

         # 删除数据

        user = User.query.get(2)

        db.session.delete(user)

    db.session.commit()

    AutomationApiParameter.query.filter(AutomationApiParameter.automationTestCaseApi==automationTestCaseApi_obj).delete()

    db.session.commit()

    1. 级联删除和一对一

    # 优化
    automationTestCaseApi_id = db.Column(db.Integer, db.ForeignKey("AutomationTestCaseApi.id"))
    # 一对一,设置级联删除
    automationTestCaseApi = db.relationship('AutomationTestCaseApi',
                                            backref=db.backref('AutomationTestResult',uselist=False,cascade="all,delete", lazy='dynamic'))

    uselist=False 添加就是一对一,否则一对多

    automationTestCaseApi = db.relationship('AutomationTestCaseApi',
                                            backref=db.backref('AutomationTestResult', lazy='dynamic'),cascade="all,delete",uselist=False)

    #安装flask-sqlalchey flask-migrate mysql数据库
    pip install flask-sqlalchemy flask-migrate
    #安装 flask-cors解决跨域访问
    pip install flask-cors
    
    数据库迁移
          创建迁移数据库 flask db init
          生成迁移脚本 flask db migrate -m "add user tables"
          将迁移脚本应用到数据库中 flask db upgrade 这个执行前确保,alembic_version的标号是最新的,不是手动更新在migrations->versions目录下
          将迁移脚本回滚 flask db downgrade
  • 相关阅读:
    Go Mac配置Air热加载
    引导滤波融合matlab
    数据工程师&数据分析师这两个岗位有什么区别?有没有发展前景?
    react中在js文件里定义的变量,如何在less文件里去使用该变量
    快速了解 Kubernetes 的架构及特性
    (附源码)mysql anjule客户信息管理系统 毕业设计 181936
    洗衣洗鞋小程序干洗店洗衣店上门取衣门店管理系统开发定制
    二分查找,查找第一个大于目标元素target所对应的下标-2300. 咒语和药水的成功对数
    [go学习笔记.第十二章.文件操作] 1.文件的基本介绍以及基本操作
    Windows 事件转发到 SQL 数据库
  • 原文地址:https://blog.csdn.net/guochunbiao0416/article/details/127441798