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):  |