图 2 输出的结果 先来分析图 1 是怎么变成图 2,图1 中的 tag1、tag2、tag3 三个字段都存在 NULL 值,且NULL值无处不在,而图2 里面的NULL只出现在这几个字段的末尾。...这个就类似于 Excel 里面的操作,把 NULL 所在的单元格删了,下方的单元格往上移,如果下方单元格的值仍是 NULL,则继续往下找,直到找到了非 NULL 值来补全这个单元格的内容。...有一个思路:把每一列去掉 NULL 后单独拎出来作为一张独立的表,这个表只有两个字段,一个是序号,另一个是去 NULL 后的值。...NULL AS tag2, 'ccc5' AS tag3), # 去 NULL 值,列转行 t2 AS (SELECT tag1 AS tag, 'tag1' AS col,...做列转行操作时,按值在原表的列出现的顺序设置了序号,目的是维持同一列中的值的相对顺序不变。
官网文档 https://flask-sqlalchemy.palletsprojects.com/en/master/quickstart/ 数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中...SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。...数据库连接通过URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI键中。...str 二进制文件 常用的SQLAlchemy列选项 选项名 说明 primary_key 如果为True,代表表的主键 unique 如果为True,代表这列不允许出现重复的值 index 如果为...True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 常用的SQLAlchemy关系选项 选项名 说明
Flask ORM 在Django框架中内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库。如果想在Flask中也达到这样效果,需要安装一个第三方来支持。...SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。...日期和时间 LargeBinary str 二进制文件 约束类型 选项 说明 primary_key 如果为True,代表表的主键 unique 如果为True,代表这列不允许出现重复的值 index...如果为True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 关系类型 选项 说明 backref 在关系的另一模型中添加反向引用...secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结 创建 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。
pip install flask-sqlalchemy pip install flask-mysqldb pip install pymysql flask-sqlalchemy所作的操作只是把模型类转换为...语句不能用flask-sqlalchemy的对象进行操作,必须用sqlalchemy最原始的方式进行操作,并要冲sqlalchemy中导入func这个工具 进行分组查询,query中必须包含分组后必须显示出的字段...下面列出了一些常用选项: primary_key:如果设置为True,这列就是表的主键 unique:如果设置为True,这列不允许出现重复的值 index:如果设置为True,为这列创建索引,提升查询效率...添加到address模型中person_id列被定义为外键,就是这个外键建立起了联系。传给db.ForeignKey()的参数’person_id’表明,这一列的值是person表中行的id值。...例如如果address模型中有两个或以上的列定义为person模型的外键,SQLAlchemy就不知道该使用哪列。
自定义模型类 本篇章介绍Flask自定义模型类的概念,以及写一个快速入门的示例,基本内容如下: 定义两个模型类,并创建数据库表 创建数据,写入数据库 编写模板以及视图函数,在页面展示数据 定义模型 模型表示程序使用的数据实体...,在Flask-SQLAlchemy中,模型一般是Python类,继承自db.Model,db是SQLAlchemy类的实例,代表程序使用的数据库。...类中的属性对应数据库表中的列。id为主键,是由Flask-SQLAlchemy管理。db.Column类构造函数的第一个参数是数据库列和模型属性类型。 如下示例:定义了两个模型类,作者和书名。...from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_MySQLdb...flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_MySQLdb() # 导入Flask-WTF表单 from
flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。 前面做了很多铺垫,那么直接进入到今天的主题。...__tablename__代表着数据库表的名称 下面的代码就是创建来一个整型的列id,以及一个字符串类的列name,并且id设置为主键 # 定义列对象 id = db.Column(db.Integer...nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 关系 关系型数据库当然得说说关系这个词,关系型数据库就是使用关系把不同表中的行联系在一起...role_id = db.Column(db.Integer, db.ForeignKey('role_id')) 添加到user模型中的role_id列被定义成外键,就是这个外键建立起列关系。...传给db.ForeignKey()的参数‘role.id'表明,这列的值是roles表中的相应行的id值。 从“一”那一端可知,添加到Role模型中的users属性代表这个关系的面向对象吃的视角。
一 数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的。它使用结构化的查询语言。...如果为True,代表表的主键 unique 如果为True,代表这列不允许出现重复的值 index 如果为True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False...,不允许有空值 default 为这列定义默认值 常用的SQLAlchemy关系选项 选项名 说明 backref 在关系的另一模型中添加反向引用 primary join 明确指定两个模型之间使用的联结条件...中无法自行决定时,指定多对多关系中的二级联结条件 二 自定义模型类 模型表示程序使用的数据实体,在Flask-SQLAlchemy中,模型一般是Python类,继承自db.Model,db是SQLAlchemy...类中的属性对应数据库表中的列。id为主键,是由Flask-SQLAlchemy管理。db.Column类构造函数的第一个参数是数据库列和模型属性类型。 如下示例:定义了两个模型类,用户和角色。 ?
和其他大多数扩展一样,Flask-SQLAlchemy 也使用 pip 安装: pip install flask-sqlalchemy 在 Flask-SQLAlchemy 中,数据库使用 URL 指定...URL 必须是保存在 Flask 对象 SQLALCHEMY_DATABASE_URI 键中,配置对象中还有一个很有用的选项,即 SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为...定义模型 模型这个术语表示程序使用的持久化实体。在 ORM 中,模型一般是一个 Python 类,类中的属性对应数据库表中的列。...这一属性可替代 role_id 访问 Role 模型,此时获取的是模型对象,而不是外键的值。 添加到 User 模型中的 role_id 列被定义为外键,就是这个外键建立起了关系。...传递 db.ForeignKey() 的参数 'roles.id' 表明,这列的值是 roles 表中行的 id 值。
使用Flask-SQLAlchemy管理数据库 在Flask-SQLAlchemy中,数据库使用URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI...注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个值为 2 小时。...bool 布尔值 Date datetime.date 时间 Time datetime.datetime 日期和时间 LargeBinary str 二进制文件 常用的SQLAlchemy列选项...选项名 说明 primary_key 如果为True,代表表的主键 unique 如果为True,代表这列不允许出现重复的值 index 如果为True,为这列创建索引,提高查询效率 nullable...如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 常用的SQLAlchemy关系选项 选项名 说明 backref 在关系的另一模型中添加反向引用 primary
SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。...$ create database demo charset=utf8; 连接数据库设置 在 Flask-SQLAlchemy 中,数据库使用URL指定,而且程序使用的数据库必须保存到Flask...日期和时间 LargeBinary str 二进制文件 ### 常用的SQLAlchemy列选项 选项名 说明 primary_key 如果为True,代表表的主键 unique 如果为True,代表这列不允许出现重复的值...index 如果为True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 ### 常用的SQLAlchemy...数据库基本操作 - 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。
flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。...如果为True,代表表的主键 unique 如果为True,代表这列不允许出现重复的值 index 如果为True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False...,不允许有空值 default 为这列定义默认值 SQLAlchemy 关系选项 选项名 说明 backref 在关系的另一模型中添加反向引用 primary join 明确指定两个模型之间使用的联结条件...中无法自行决定时,指定多对多关系中的二级联结条件 数据库的基本操作 Flask-SQLAlchemy中,插入/修改/删除等操作,均有数据库会话管理....视图函数中定义的模型类 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
简单说,ORM是一个可以使我们更简单的操作数据库的框架。 SQLAlchemy是什么?Flask-SQLAlchemy 又是什么?...Flask-SQLAlchemy是一个简化了 SQLAlchemy 框架的Flask扩展,封装了对数据库的基本操作。该扩展既可结合Flask框架一起使用,也可以单独安装使用,非常灵活。...安装 flask-sqlalchemy pip install flask-sqlalchemy 安装pymysql驱动 pip install pymysql 连接不同的数据库,有不同的URL...__ == "__main__": app.run() SQLAlchemy常用参数 参数 说明 primary_key 如果设为 True,列为表的主键 unique 如果设为 True,列不允许出现重复的值...index 如果设为 True,为列创建索引,提升查询效率 nullable 如果设为 True,列允许使用空值;如果设为 False,列不允许使用空值 default 为字段设置默认值 SQLAlchemy
列选项 primary_key:如果为True,代表表的主键 unique:如果为True,代表这列不允许出现重复的值 index:如果为True,为这列创建索引,提高查询效率 nullable:如果为...True,允许有空值,如果为False,不允许有空值 default:为这列定义默认值 2.4 常用的SQLALchemy关系选项 backref:在关系的另一模型中添加反向引用,用于设置外键名称,...secondary join:在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件 3,数据库基本操作 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理...3.1 在视图函数中定义模型类 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name_...'] = 'session:' # 保存到session中的值的前缀 Session(app) 三、蓝图Blueprint 1,模块化 随着flask程序越来越复杂,我们需要对程序进行模块化的处理
前言 在我们做web开发的时候,经常需要用到与数据库交互,因为我们的数据通常都是保存在数据库中的,如果有人需要访问,就必须与数据库访问,所以今天我们介绍一个Flask中与数据库交互的插件---Flask-Sqlalchemy...,比如: SQLALCHEMY_NATIVE_UNICODE # 可以用于显式禁用原生 unicode 支持 SQLALCHEMY_POOL_SIZE # 数据库连接池的大小,默认是引擎默认值...: __bind_key__ = 'users' bind key 内部存储在表的 info 字典中 即:info={'bind_key': 'users'} 2.建立数据表并插入值 1).继承"...db.Model"类 from flask_sqlalchemy import SQLAlchemy from flask import Flask import config app=Flask(__...(序列)定义 key 列名的别名 primary_key 如果为True,则是主键 nullable 如果是True,则可以为null default 设置默认值,默认是None
其中,主键列指定了 PRIMARY KEY 约束,强制该列的值在表中唯一,并且使用 AUTO_INCREMENT 关键字,表示该列的值会自动递增生成。...因为外键约束的作用是确保参考表中的某一列值必须存在于当前表的某一列中,所以参考表中的该列必须设置为唯一的且非空。...需要注意的是,当我们向一个已存在的表中添加新的列时,新的列默认值为 NULL,如果需要给新的列赋默认值,可以使用 DEFAULT 关键字。...UNIQUE:唯一性约束,用于限制列中的数据不能重复。 NOT NULL:非空约束,用于限制列中的数据不能为空。 CHECK:检查约束,用于限制列中的数据必须满足指定的条件。...唯一约束:可以确保表中某一列的值是唯一的,也可避免特定列出现空值。 非空约束:可以确保表中的某一列不为空。 检查约束:可以定义额外的规则来确保某一列或多个列的数据值符合规定。
在这个ORM模型中创建一些属性,来跟表中的字段进行一一映射。这些属性必须是sqlalchemy给我们提供好的数据类型。...可以使用default设置初始默认值 name:指定ORM模型中某个属性映射到表中的字段名。如果不指定,那么会使用这个属性的名字来作为字段名。如果指定了,就会使用指定的这个值作为参数。...外键和四种约束 使用SQLAlchemy创建外键非常简单。在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了。从表中外键的字段,必须和父表的主键字段类型保持一致。...")) 外键约束有以下几项: 1....NO ACTION:在MySQL中,同RESTRICT。 3. CASCADE:级联删除。 父删子删 4. SET NULL:父表数据被删除,子表数据会设置为NULL。
app.config['SQLALCHEMY_ECHO'] = False # 数据库连接池的大小。默认是数据库引擎的默认值 (通常是 5)。...`), KEY `ix_order_bang_creator_id` (`creator_id`) ) 2.在flask中记录查询较慢的sql语句及相关信息 本人设置最长查询时间为0.1秒便记录 相关...第二种:对于客户端不需要表中全部字段的情况,在查询时最好选择具体的字段,而不是直接 select * from table;这样 可以减少网络带宽 在sqlalchemy中为如下(直接使用类方法,及查询具体字段...city字段类型是 char类型 通过 explain查看本条sql,city_id传的值是int类型: ? 索引使用的是 create_time。...把city_id改为数据库中设定的 str 类型,再次查看 ? ?
Flask-SQLAlchemy是一个Flask扩展,简化了在Flask应用中使用SQLAlchemy的操作,SQLAlchemy是一个强大的关系型数据库框架,支持多种数据库后台。...在Flask-SQLAlchemy中,指定使用何种数据库是通过URL来实现的,各种主流数据库引擎使用URL格式如下: # hostname:数据库服务所在主机 # database:使用的数据库名...shell中查看数据库中对象的属性: # print(admin_role.id) # 注意,对数据库的操作,都需要:添加到数据库会话管理,然后在提交才会真正的在数据库中修改 # 查询: # 使用...(app_db.String(64), unique=True) # unique:该列不允许出现重复的值 # 定义关系: users = app_db.relationship(...即为role表中的id role_id = app_db.Column(app_db.Integer,app_db.ForeignKey("role.id")) # 看清楚,这里是role.id
领取专属 10元无门槛券
手把手带您无忧上云