Flask(数据库操作 十一)
查询
查询全部
1 | users = User.query.all() |
查询第一个
1 | users = User.query.first() |
通过主键获取
1 | users = User.query.get(1) |
多个主键
1 | users = User.query.get((1,5)) |
filter_by筛选
只能处理相等
1 | admin = User.query.filter_by(username='admin').first() |
filter筛选
1 | User.query.filter(User.email.endswith("@qq.com")).all() |
1 | from sqlalchemy.sql.operators import ColumnOperators |
支持的字段操作:ColumnOperators
:/usr/local/lib/python3.7/site-packages/sqlalchemy/sql/operators.py.ColumnOperators
排序
1 | User.query.order_by(User.username.desc()).all() |
现在返回用户的数量
1 | User.query.order_by(User.username.desc()).limit(1).all() |
未找到
使用first_or_404
没找到就用abort()
和异常处理机制配合
删除
1 | db.session.delete(me) |
更新
1 | user = User.query.get(1) |
外键关联
多对一
例子:
多个学生 一个班级
写法1
1 | class Project(db.Model): |
写法2
1 | class Project(db.Model): |
backref vs back_populates
- back_populates 需要双向显示说明;backref只需要指名一边隐式声明
- back_populates 更麻烦;backref 更简单
- back_populates 可读性强,可以表明各个表之间的关系
一对一
例子:
一个人一个身份证号
1 | class Project(db.Model): |
多对多
例子:
1个学生 多门课程
1门课程 多个学生
1 | xuanke = db.Table('xuanke', |
插入数据
1 |
|
查找数据
1 |
|
自引用
1 | class Follower(db.Model): |