ORM与Flask-SQLAlchemy扩展
# ORM优势与缺点
# 优势:
(1).让开发人员专注于写代码,不用于考虑运维的事情
(2).省去自己拼写SQL,保证SQL语法的正确性
(3).一次编写可以适配多个数据库
(4).防止注入攻击
(5).在数据库表名或字段名发生变化时,只需修改模型类的映射,无需修改数据库操作的代码
# 缺点:
执行效率低下
连接数据库:
class Config(object):
SQLALCHEMY_DATABASE_URI = 'mysql://root:admin123@127.0.0.1:3306/jiyunstus'
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True
app.config.from_object(Config)
创建表
# 编写模型类
class User(db.Model):
id = db.Column(db.Integer,comment='主键ID',primary_key=True,autoincrement=True)
name=db.Column(db.String(64),comment='用户名')
age=db.Column(db.Integer,comment='年龄')
数据库迁移命令
python manage.py db init python manage.py db migrate python manage.py db upgrade
查询数据
# 查询全部
# user_all=User.query.all()
# 查询单个 id
# user_info=User.query.get(2)
# 查询单个 字段
# user_info=User.query.filter(User.name=='张三').first()
# 查询多个相同 字段
# user_all=User.query.filter(User.name=='张三').first()
# user_all=User.query.filter(User.id==2).all
# user_all = User.query.filter(User.id == 2).first()
# user_all = User.query.filter_by(username = 'name').first()
########### filter()实现的条件查询
User.query.filter(User.username=='name').first()
########## filter_by()实现的条件查询
User.query.filter_by(username="name").first()
# ------分页
# user_all=User.query.limit(2).offset(4).all
# -----排序
# user_all=User.qyery.order_by(User.age.desc()).all()
# 或者
# user_all=User.query.filter(or_(User.name=='aa',User.name=='bb')).all()
# 并且
# user_all = User.query.filter(and_(User.name == 'aa', User.age == '18')).all()
# 不是
user_all = User.query.filter(not_(User.name == 'aa')).all()
# -----比较
# 小于 lt
user_all=User.query.filter(User.age.__lt__(20)).all()
# 小于等于 le
user_all = User.query.filter(User.age.__le__(20)).all()
# 大于 gt
user_all = User.query.filter(User.age.__gt__(20)).all()
# 大于等于 ge
user_all = User.query.filter(User.age.__ge__(20)).all()
# 在、、之内
user_all = User.query.filter(User.age.in_((10,20,30))).all()
# 模糊查询
user_all = User.query.filter(User.age.like('%王%')).all()
# 个数
rs=db.session.query(func.count(User.id)).first()[0]
# 和
rs = db.session.query(func.sum(User.age)).first()[0]
# 平均数
rs = db.session.query(func.avg(User.age)).first()[0]
# 最大值
rs = db.session.query(func.max(User.age)).first()[0]
修改数据
req=reqparse.RequestParser()
req.add_argument('name',type=str,required=True)
req.add_argument('age', type=int, required=True)
# 校验并解析
args=req.parse_args()
# rs = User.query.filter(User.id == args['id']).update({
# 'name':args['name'],
# 'age':args['age']
# })
rs = User.query.filter(User.id == args['id']).update(args)
# 提交事务
db.session.commit()
删除数据
req = reqparse.RequestParser()
req.add_argument('id', type=int, required=True)
args = req.parse_args()
rs = User.query.filter(User.id == args['id']).update()
# 提交事务
db.session.commit()



