Flask-SQLAlchemy 使用
安装
1
2
|
pip
install
flask
-
sqlalchemy
pip
install
MySQL
-
python
|
需要先安装mysql开发库的。
使用
创建SQLALchemy 对象, 然后再 绑定Flask
1
2
3
4
5
|
from
flask_sqlalchemy
import
SQLALchemy
from
flask
import
Flask
app
=
Flask
(
__name__
)
db
=
SQLALchemy
(
)
db
.
init_app
(
app
)
|
指定SQLALchemy URI
1
|
app
.
config
[
'SQLALCHEMY_DATABASE_URI'
]
=
"mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>"
|
定义模型
使用 ORM 就肯定要定义对象的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class
Users
(
db
.
Model
)
:
__tablename__
=
'users'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
email
=
db
.
Column
(
db
.
String
,
unique
=
True
)
username
=
db
.
Column
(
db
.
String
,
unique
=
True
)
passwd
=
db
.
Column
(
db
.
String
)
date
=
db
.
Column
(
db
.
DateTime
)
class
Users_detail
(
db
.
Model
)
:
__tablename__
=
'users_detail'
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
uid
=
db
.
Column
(
db
.
Integer
,
unique
=
True
)
age
=
db
.
Column
(
db
.
Integer
)
sex
=
db
.
Column
(
db
.
SmallInteger
)
location
=
db
.
Column
(
db
.
String
)
intro
=
db
.
Column
(
db
.
Text
)
todo
=
db
.
Column
(
db
.
Text
)
modifytime
=
db
.
Column
(
db
.
DateTime
)
inserttime
=
db
.
Column
(
db
.
DateTime
)
|
从这两个例子可以看到,定义一列是需要使用 db.Column
的,然后需要指定数据类型,还有列的选项,常用的数据类型有:
类型名 | Python 类型 | 说明 |
---|---|---|
Integer | int | 普通整数,一般是32位 |
SmallInteger | int | 取值范围小的整数,一般是 16 位 |
BigInteger | int 或 long | 不限制精度的整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | 定点数 |
String | str | 变长字符串 |
Text | str | 编程字符串,对较长或不限长度的字符串做了优化 |
Unicode | unicode | 变长 Unicode 字符串 |
UnicodeText | unicode | 变长 Unicode 字符串,对较长或不限长度的字符串做了优化 |
Boolean | bool | 布尔值 |
Date | datetime.date | 日期 |
Time | datetime.time | 时间 |
DateTime | datetime.datetime | 日期和时间 |
Interval | datetime.timedelta | 时间间隔 |
Enum | str | 一组字符串 |
PickleType | 任何 python 对象 | 自动使用 Pickle 序列化 |
LargeBinary | str | 二进制文件 |
而一些常用的 SQLAlchemy
列选项: 选项名 | 说明 |
---|---|
primary_key | 如果设为 True,这列就是表的主键 |
unique | 如果设为 True,这列不允许出现重复的值 |
index | 如果设为 True,为这列创建索引,提升查询效率 |
nullable | 如果设为 True,这列允许使用空值,如果设为 False,这列不允许使用空值 |
default | 为这列定义默认值 |
数据库操作
数据库的操作不外乎就是增删改查,所以这里就介绍一下增删改查怎么做,和其他 ORM(例如 MongoEngine
) 不一样,SQLAlchemy
使用之前需要先创建表和数据库才能操作数据。 所以第一步是创建表:
1
2
3
|
$
python
app
.
py
shell
>>>
from
app
import
db
>>>
db
.
create_all
(
)
|
插入数据
1
2
3
4
5
6
7
8
9
|
from
app
import
db
,
Users
,
Users_detail
from
datetime
import
datetime
user
=
User
(
email
=
'ttlsa@ttlsa.com'
,
username
=
'ttlsa'
,
passwd
=
'ttlsa'
,
date
=
datetime
.
now
(
)
)
user_detail
=
Users_detail
(
XXXXX
)
#自己补齐去吧
# 下面这个很重要
db
.
session
.
add
(
user
)
db
.
session
.
add
(
user_detail
)
db
.
session
.
commit
(
)
|
这里需要提一下的就是 db.session
,这个 session
是数据库中 事务的含义,因此我们可以提交修改数据,也可以回滚取消修改。
修改数据
1
2
3
|
users
=
Users
(
username
=
"ttlsa2"
)
db
.
session
.
add
(
user
)
db
.
session
.
commit
(
)
|
修改只需要修改属性并提交就行了。
删除数据
1
2
|
db
.
session
.
delete
(
)
db
.
session
.
commit
(
)
|
删除数据直接调用 delete 方法即可,记得 commit。
查询数据
查询数据稍微复杂一下
- 获得查询对象
- 添加过滤条件
- 如果还有其他分组之类的,继续添加
1
2
|
Users
.
query
.
all
(
)
Users
.
query
.
filter_by
(
id
=
1
)
|
这里的 filter_by 叫做过滤器,常用的过滤器有
过滤器 | 说明 |
---|---|
filter | 把过滤器添加到原查询上,返回一个新查询 |
filter_by | 把等值过滤器添加到原查询上,返回一个新查询 |
limit | 使用指定的值限制返回的结果数量,返回一个新查询 |
offset | 便宜原查询返回的结果, 返回一个新查询 |
order_by | 根据指定条件对原查询结果进行排序,返回一个新查询 |
group_by | 根据指定条件对原查询结构进行分组,返回一个新查询 |
如果后面不加.all(),那么其实是不会真正到数据库执行的,类似 all 的执行器还有很多,常用的有:
方法 | 说明 |
---|---|
all | 以列表形式返回查询的所有结果 |
first | 返回查询的第一个结果,如果没有结果,则返回 None |
first_or_404 | 返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误输出 |
get | 返回指定主键对应的行,如果没有对应的行,则返回 None |
get_or_404 | 返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误输出 |
count | 返回查询结果的数量 |
paginate | 返回一个 Paginate 对象,它包含指定范围内的结果 |
获取更多可以查看 《SQLAlchemy QueryAPI》
收 藏
成长的对话版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!