pip install flask-sqlalchemy
http://www.pythondoc.com/flask-sqlalchemy/index.html组件初始化数据库URI(连接地址)格式: 协议名://用户名:密码@数据库IP:端口号/数据库名,如:app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test31'
需要注意的是,如果连接的是MySQL数据库,则协议名需要改为mysql+pymysql:
如:
'mysql+pymysql://root:1234@127.0.0.1/jsonflow?charset=utf8mb4'
注意点:
常用的字段类型

常用的字段选项
primary_key 如果设为 True,这列就是表的主键
unique 如果设为 True,这列不允许出现重复的值
index 如果设为 True,为这列创建索引,提升查询效率
nullable 如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值
default 为这列定义默认值
doc 字段说明
模型例子
- class User(db.Model):
- __tablename__ = 't_user' # 设置表名, 表名默认为类名小写
-
- id = db.Column(db.Integer, primary_key=True) # 设置主键, 默认自增
- name = db.Column('username', db.String(20), unique=True) # 设置字段名 和 唯一约束
- age = db.Column(db.Integer, default=10, index=True) # 设置默认值约束 和 索引
在Flak-SQLAlchemy中,查询操作是通过query对象操作数据。
以User模型为例
User.query.all()
- User.query.filter_by(age=18).all()
- User.query.filter(age==18).all()
需要注意的是,filter查询更适合复杂查询,如模糊查询、多条件查询等。
- from sqlalchemy import and_,or_
- User.query.filter(and_(User.name=="user", User.age==18)).all()
- User.query.filter(or_(User.name=="user", User.age==18)).all()
and_表示括号内的表达式都要满足
or_表示括号内的表达式满足任意一个即可
- User.query.filter(User.username.like('jingqi')).all())
- User.query.filter(User.username.notlike('jingqi%')).all()
like表示包含
notlike表示不包含
%表示任意多个字符
_表示任意一个字符
User.query.get(1)
表示获取id为1的数据
- User.query.filter(User.username!='jingqi').limit(2).all()
- User.query.filter(User.username!='jingqi').offset(2).all()
- User.query.filter(User.username!='jingqi').slice(2,3).all()
limit:可以限制每次查询的时候只查询几条数据。
offset:可以限制查找数据的时候过滤掉前面多少条
slice(start,stop)方法表示切片操作。也可以使用[start:stop]的方式来进行切片操作,开发中常用的是中括号进行切片
bus_query.filter(Business.content.op('->>')('$.GnypMain[0].receipt_date')
其中bus_query和Business都是模型类,而content是json字段名。
在Flak-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。
会话用db.session表示。在准备把数据写入数据库前,需要先将数据添加到会话中然后调用commit()方法提交会话。
增
- user = User()
- user.username = 'fuyong'
- user.password = '123'
- # 将新创建的用户添加到数据库会话中
- db.session.add(user)
- # 将数据库会话中的变动提交到数据库中, 如果不commit, 数据库中是没有变化的.
- db.session.commit()
删
- # 获取用户对象
- user = User.query.filter_by(id=1).first() #查询出id=1的用户
- # 删除用户
- db.session.delete(user)
- #提交数据库会话
- db.session.commit()
改
- # 获取用户对象
- user = User.query.filter_by(id=2).first()
- # 直接赋值更新数据
- user.password = '123567'
- #提交数据库会话
- db.session.commit()