from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/testdb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
age = db.Column(db.SmallInteger)
@app.route("/")
def index():
"""
sqlalchemy中的事务
1) 会自动创建隐式的事务,将sql操作添加到事务中
2) 增删改操作完,需要提交事务,如果失败会自动回滚
3) 查询完,会自动回滚
4) 也可以手动回滚,以及手动添加锁
"""
db.drop_all()
db.create_all()
# 需求: 用户<10时,才能添加数据
user1 = User(name='zs', age=30)
db.session.add(user1)
# 判断用户数是否<10 排它锁 with_for_update() 共享锁 with_for_update(read=True)
if User.query.with_for_update().count() < 10:
db.session.commit()
else:
db.session.rollback() # 手动回滚
return "index"
if __name__ == '__main__':
app.run()