Flask-SQLAlchemy一般方法总结

慕容嘉熙
2023-12-01

常用的SQLAlchemy字段类型

类型名python中类型说明
Integerint普通整数,一般是32位
SmallIntegerint取值范围小的整数,一般是16位
BigIntegerint或long不限制精度的整数
Floatfloat浮点数
Numericdecimal.Decimal普通数值,一般是32位
Stringstr变长字符串
Textstr变长字符串,对较长或不限长度的字符串做了优化
Unicodeunicode变长Unicode字符串
UnicodeTextunicode变长Unicode字符串,对较长或不限长度的字符串做了优化
Booleanbool布尔值
Datedatetime.date日期
Timedatetime.datetime日期和时间
LargeBinarystr二进制文件

常用的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) 

 类似资料: