安装
pip install flask-sqlalchemy pip install MySQL-python
需要先安装mysql开发库的。
使用
创建SQLALchemy 对象, 然后再 绑定Flask文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
from flask_sqlalchemy import SQLALchemy from flask import Flask app = Flask(__name__) db = SQLALchemy() db.init_app(app)
指定SQLALchemy URI文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>"
定义模型
使用 ORM 就肯定要定义对象的文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
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
的,然后需要指定数据类型,还有列的选项,常用的数据类型有:文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
类型名 | 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文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
列选项: 选项名 | 说明 |
---|---|
primary_key | 如果设为 True,这列就是表的主键 |
unique | 如果设为 True,这列不允许出现重复的值 |
index | 如果设为 True,为这列创建索引,提升查询效率 |
nullable | 如果设为 True,这列允许使用空值,如果设为 False,这列不允许使用空值 |
default | 为这列定义默认值 |
数据库操作
数据库的操作不外乎就是增删改查,所以这里就介绍一下增删改查怎么做,和其他 ORM(例如 MongoEngine
) 不一样,SQLAlchemy
使用之前需要先创建表和数据库才能操作数据。 所以第一步是创建表:文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
$ python app.py shell >>> from app import db >>> db.create_all()
插入数据文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
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
是数据库中 事务的含义,因此我们可以提交修改数据,也可以回滚取消修改。文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
修改数据文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
users = Users(username="ttlsa2") db.session.add(user) db.session.commit()
修改只需要修改属性并提交就行了。文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
删除数据文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
db.session.delete() db.session.commit()
删除数据直接调用 delete 方法即可,记得 commit。文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
查询数据文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
查询数据稍微复杂一下文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
- 获得查询对象
- 添加过滤条件
- 如果还有其他分组之类的,继续添加
Users.query.all() Users.query.filter_by(id=1)
这里的 filter_by 叫做过滤器,常用的过滤器有文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
过滤器 | 说明 |
---|---|
filter | 把过滤器添加到原查询上,返回一个新查询 |
filter_by | 把等值过滤器添加到原查询上,返回一个新查询 |
limit | 使用指定的值限制返回的结果数量,返回一个新查询 |
offset | 便宜原查询返回的结果, 返回一个新查询 |
order_by | 根据指定条件对原查询结果进行排序,返回一个新查询 |
group_by | 根据指定条件对原查询结构进行分组,返回一个新查询 |
如果后面不加.all(),那么其实是不会真正到数据库执行的,类似 all 的执行器还有很多,常用的有:文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/
方法 | 说明 |
---|---|
all | 以列表形式返回查询的所有结果 |
first | 返回查询的第一个结果,如果没有结果,则返回 None |
first_or_404 | 返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误输出 |
get | 返回指定主键对应的行,如果没有对应的行,则返回 None |
get_or_404 | 返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误输出 |
count | 返回查询结果的数量 |
paginate | 返回一个 Paginate 对象,它包含指定范围内的结果 |
获取更多可以查看 《SQLAlchemy QueryAPI》文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/ 文章源自运维生存时间-https://www.ttlsa.com/python/flask-sqlalchemy-using/

评论