类型名 | python中类型 | 说明 |
---|---|---|
Integer | int | 普通整数,一般是32位 |
SmallInteger | int | 取值范围小的整数,一般是16位 |
BigInteger | int或long | 不限制精度的整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | 普通数值,一般是32位 |
String | str | 变长字符串 |
Text | str | 变长字符串,对较长或不限长度的字符串做了优化 |
Unicode | unicode | 变长Unicode字符串 |
UnicodeText | unicode | 变长Unicode字符串,对较长或不限长度的字符串做了优化 |
Boolean | bool | 布尔值 |
Date | datetime.date | 日期 |
Time | datetime.datetime | 日期和时间 |
LargeBinary | str | 二进制文件 |
选项名 | 说明 |
---|---|
primary_key | 如果为True,代表表的主键 |
unique | 如果为True,代表这列不允许出现重复的值 |
index | 如果为True,为这列创建索引,提高查询效率 |
nullable | 如果为True,允许有空值,如果为False,不允许有空值 |
default | 为这列定义默认值 |
选项名 | 说明 |
---|---|
backref | 在关系的另一模型中添加反向引用,用于设置外键名称,在1查多的 |
primary join | 明确指定两个模型之间使用的连表条件 |
uselist | 如果为False,不使用列表,而使用标量值 |
order_by | 指定关系中记录的排序方式 |
secondary | 指定多对多关系中关系表的名字 |
secondary join | 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级连表条件 |
sql查询语句:
all()返回所有用户
User.query.all()
first()返回第一条用户 没有返回None
first_or_404()返回第一条用户,没有返回404错误响应
User.query.first()
User.query.first_or_404()
get() 返回指定的主键(id 字段)的用户
get_or_404() 返回指定的主键(id字段)的用户,没有返回404错误响应
User.query.get(1)
User.query.get_or_404(1)
count() 返回用户的数量
User.query.count()
paginate()返回一个Pagination对象,可以对用户进行分页处理
User.query.order_by(user.timestamp.desc()).paginate(page, per_page)
page: 当前页数
per_page: 每页的条数
with_parent(instance)传入模型类实例对象作为参数,返回和这个实例相关的对象
实例:获取用户未读信息的条数(User, Massage 外键关联)
user = User.query.get(1)
massage = Massage.query.with_parent(user).filter_by(is_read = False).count()
常用过滤方法
filter()、filter_by()使用制定的过滤规则,获取想要的查询对象
User.query.filter(User.name=='jack').first()
User.query.filter_by(name='jack').first()
like 模糊过滤查询:
User.query.filter(User.name like ('%ac%')).all()
in 包含过滤查询:
User.query.filter(User.name in_(['jack','mary','bruce'])).all()
not in 不包含过滤查询:
User.query.filter(~User.name in_(['jack','mary','bruce'])).all()
and 逻辑与过滤查询:
User.query.filter(and_(User.name=='jack', User.gender == 1)).all()
or 逻辑或过滤查询:
User.query.filter(or_(User.name=='jack', User.name == 'mary')).all()
order_by 按照规定的顺序查询:
# 按照id升序
User.query.filter(User.gender==1).order_by(User.id).all()
# 按照id降序
User.query.filter(User.gender==1).order_by(User.id.desc()).all()
limit 限制数量查询:
User.query.filter(User.gender==1).limit(3).all()
group_by 根据条件分组查询:
from sqlalchemy import func
# 使用with_entities()方法来获取要在结果中返回的列
# lable 给字段起别名
User.query.with_entities(User, func.count(*).lable('num')).group_by(User.gender).all()
offset 根据指定的偏移量查询:
User.query.offset(2).limit(5).all()
func.random 随机获取查询:
User.query.order_by(func.random()).limit(10)