开发者社区> 问答> 正文

Flask-sqlalchemy先查询, 再更新的代码是什么?

Flask-sqlalchemy先查询, 再更新的代码是什么?

展开
收起
游客qzzytmszf3zhq 2021-11-18 21:46:26 479 0
1 条回答
写回答
取消 提交回答
  • from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    # 相关配置
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SQLALCHEMY_ECHO'] = True
    
    # 创建组件对象
    db = SQLAlchemy(app)
    
    
    # 构建模型类  商品表
    class Goods(db.Model):
        __tablename__ = 't_good'  # 设置表名
        id = db.Column(db.Integer, primary_key=True)  # 设置主键
        name = db.Column(db.String(20), unique=True)  # 商品名称
        count = db.Column(db.Integer)  # 剩余数量
    
    
    @app.route('/')
    def purchase():
        """购买商品"""
    
        # 更新方式1: 先查询后更新
        # 缺点: 并发情况下, 容易出现更新丢失问题 (Lost Update)
    
        # 1.执行查询语句, 获取目标模型对象
        goods = Goods.query.filter(Goods.name == '方便面').first()
        # 2.对模型对象的属性进行赋值 (更新数据)
        goods.count = goods.count - 1
        # 3.提交会话
        db.session.commit()
    
        return "index"
    
    if __name__ == '__main__':
        # 删除所有继承自db.Model的表
        db.drop_all()
        # 创建所有继承自db.Model的表
        db.create_all()
    
        # 添加一条测试数据
        goods = Goods(name='方便面', count=1)
        db.session.add(goods)
        db.session.commit()
        app.run(debug=True)
    
    
    
    2021-11-18 21:46:54
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载