Flask-SQLAlchemy详解
安装
pip install flask-sqlalchemy配置
SQLALCHEMY_DATABASE_URI
连接数据库。示例:mysql://username:password@host/post/db?charset=utf-8
SQLALCHEMY_BINDS
一个将会绑定多种数据库的字典。 更多详细信息请看官文 绑定多种数据库.
SQLALCHEMY_ECHO
调试设置为true
SQLALCHEMY_POOL_SIZE
数据库池的大小,默认值为5。
SQLALCHEMY_POOL_TIMEOUT
连接超时时间
SQLALCHEMY_POOL_RECYCLE
自动回收连接的秒数。
SQLALCHEMY_MAX_OVERFLOW
控制在连接池达到最大值后可以创建的连接数。当这些额外的 连接回收到连接池后将会被断开和抛弃。
SQLALCHEMY_TRACK_MODIFICATIONS
如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。
常用的SQLAlchemy字段类型
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
在关系的另一模型中添加反向引用
lazy
决定了什么时候SQLALchemy从数据库中加载数据 (子查询方式(subquery), 动态方式(dynamic))
primary join
明确指定两个模型之间使用的联结条件
uselist
如果为False,不使用列表,而使用标量值
order_by
指定关系中记录的排序方式
secondary
指定多对多关系中关系表的名字
secondary join
在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件
常用的SQLAlchemy查询过滤器
filter()
把过滤器添加到原查询上,返回一个新查询
filter_by()
把等值过滤器添加到原查询上,返回一个新查询
limit
使用指定的值限定原查询返回的结果
offset()
偏移原查询返回的结果,返回一个新查询
order_by()
根据指定条件对原查询结果进行排序,返回一个新查询
group_by()
根据指定条件对原查询结果进行分组,返回一个新查询
常用的SQLAlchemy查询执行器
all()
以列表形式返回查询的所有结果
first()
返回查询的第一个结果,如果未查到,返回None
first_or_404()
返回查询的第一个结果,如果未查到,返回404
get()
返回指定主键对应的行,如不存在,返回None
get_or_404()
返回指定主键对应的行,如不存在,返回404
count()
返回查询结果的数量
paginate()
返回一个Paginate对象,它包含指定范围内的结果
示例
操作数据库需要先创建一个db对象,通常写在exts.py文件里。
flask项目一般将数据库配置写入configs.py文件里面,配置在创建引擎前需写好,不要在程序运行时修改配置,如下。
写完数据库配置后需要和app绑定,app.py文件里写flask应用的创建和蓝图的注册等等,如下:
1.表的创建
2.表的映射
创建好表后需要映射到数据库中,这里需要用到flask-migrate库。下面是启动文件manage.py。
配置好启动文件后,进入项目根目录,在命令行输入以下代码:
3.表的增删查改
补充
实际操作顺序:
1.python 文件 db init
2.python 文件 db migrate -m"版本名(注释)"
3.python 文件 db upgrade 然后观察表结构
4.根据需求修改模型
5.python 文件 db migrate -m"新版本名(注释)"
6.python 文件 db upgrade 然后观察表结构
7.若返回版本,则利用 python 文件 db history查看版本号
8.python 文件 db downgrade(upgrade) 版本号
一对多查询
多对多查询
添加测试数据:
要查某个学生修的全部课程,修了某个课程的全部学生:
Last updated