Flask-SQLAlchemy的使用

安装

pip install flask-sqlalchemy

文档

Flask-SQLAlchemy — Flask-SQLAlchemy 2.0 documentation (pythondoc.com)http://www.pythondoc.com/flask-sqlalchemy/index.html组件初始化

基本配置

  • flask-sqlalchemy 的相关配置也封装到了 flask 的配置项中, 可以通过app.config属性 或 配置加载方案 (如config.from_object) 进行设置
  • 配置详情

配置 — 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'

创建模型类

  • flask-sqlalchemy 的关系映射和 Django-orm 类似:
    • 类 对应 表
    • 类属性 对应 字段
    • 实例对象 对应 记录

注意点:

  • 模型类必须继承 db.Model, 其中 db 指对应的组件对象
  • 表名默认为类名小写, 可以通过 __tablename__类属性 进行修改
  • 类属性对应字段, 必须是通过 db.Column() 创建的对象
  • 可以通过 create_all() 和 drop_all()方法 来创建和删除所有模型类对应的表
    • 可以使用Flask-Migrate扩展解决该问题

常用的字段类型

Flask-SQLAlchemy的使用_第1张图片

常用的字段选项

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]的方式来进行切片操作,开发中常用的是中括号进行切片

  • 对字段中的json数据进行查询
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()

你可能感兴趣的:(flask,flask,python,后端)