常用的SQLAlchemy字段类型

类型名

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

二进制文件

常用的SQLAlchemy列选项

选项名

说明

primary_key

如果为True,代表表的主键

unique

如果为True,代表这列不允许出现重复的值

index

如果为True,为这列创建索引,提高查询效率

nullable

如果为True,允许有空值,如果为False,不允许有空值

default

为这列定义默认值

常用的SQLAlchemy关系选项

选项名

说明

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)