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字段类型

类型名
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

在关系的另一模型中添加反向引用

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