flask-SQLAlchemy 是一个为flask应用增加SQLAlchemy支持的扩展。
在python扩展库中其实包含了SQLAlchemy。在版本的不断叠加后,已经被整合到flask架构中,flask-SQLAlchemy简化在Flask中SQLAlchemy的使用,提供了有用的默认值和额外的助手来更简单地完成常见任务。
创建db
SQLAlchemy 需要的 Base, engine, session 都被整合到了一起,用 SQLAlchemy 类实现,该类实例需要传入 Flask 对象,并利用 app.config[‘SQLALCHEMY_DATABASE_URI’] 来赋值 database 的 URI
1 | from flask import Flask |
通过 db 可以获取:基类db.Model
,Session db.session
,引擎 db.engine
映射类
在构造映射类的时候,需要继承的基类由 db.Model 来实现
1 | class User(db.Model): |
数据库操作
在数据库操作部分,与直接使用SQLAlchemy
没有什么不同,但是在查询方面,除了可以使用session.query(User)
的方式查询,还可以使用User.query
的方式查询,这样书写会更方便。
创建/删除所有表
1 | db.create_all() # 创建 |
插入行
插入单行
1 | db.session.add(User(id=1, name="admin", password="password")) |
插入多行
1 | db.session.add_all[(User(id=1, name="admin", password="password"), User(id=2, name="user1", password="password1")]) |
更新行
更新行时先查询出要更新的行数据,再进行修改更新
1 | admin = User.query.filter_by(name="admin").first() |
删除行
删除行时要先查询出要删除的更新,再进行删除
1 | admin = User.query.filter_by(name="admin").first() |
查询
查询表中数据(select *)
1
2User.query.first() # 查询表中第一条数据,返回映射类的对象
User.query.all() # 查询表中所有数据,返回一个映射类的对象的列表按照一个条件过滤数据(where)
1
2User.query.filter_by(name="admin").first() # 指定条件查询
User.query.filter_by(name="admin").all()按照两个条件过滤数据记录(where and)
1
2User.query.filter_by(name="admin", id=1).first() # 指定条件查询
User.query.filter_by(name="admin", id=1).all()排序查询(order by)
1
2User.query.order_by(User.id).all()
User.query.order_by(User.id.desc()).all() # 降序排序,默认是升序排序多表查询(join)
1
User.query.filter_by(id=1).join(Environments,Variable.env_id == Environments.id).first()
分组查询(group by)
1
User.query.group_by(User.id).all()
分页查询(limit)
1
2
3User.query.limit(1).all()
User.query.limit(1).offset(2).all()
User.query.filter_by(id=3).limit(1).offset(1).all()
执行原生sql
1 | sql = 'update user set name = :name where id = :id' |