pip install flask-sqlalchemy
配置 — Flask-SQLAlchemy 2.0 documentation (pythondoc.com)http://www.pythondoc.com/flask-sqlalchemy/config.html#id2
数据库URI(连接地址)格式: 协议名://用户名:密码@数据库IP:端口号/数据库名,
如:app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/test31'
需要注意的是,如果连接的是MySQL数据库,则协议名需要改为mysql+pymysql:
如:
'mysql+pymysql://root:[email protected]/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字段名。
(1条消息) flask数据库sqlalchemy查询_月疯的博客-CSDN博客_flask sqlalchemy查询https://blog.csdn.net/chehec2010/article/details/121921037
在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()