Flask Web第五章

第五章

5.3.1链接数据库服务器

  1. Flask—SQLAlchemy中,数据库的URI通过配置SQLALCHEMY_DATABASE_URI设置,默认为SQLite内存型数据库

5.3.2定义数据库模型

  1. 数据模型类需要继承db.Model基类,表的字段列由db.Column类的实例表示,字段列的类型通过第一个参数传入

  2. 根据模型类的名称生成一个表名称,规则是单个单词转换为小写,多个单词转为小写并使用下划线分割。若想指定表名称,定义_tablename_属性定义

  3. 字段名默认为类属性名,也可以给字段类设置name关键字参数指定

5.3.3创建数据库和表

  1. 创建模型类后,我们需要手动创建数据库和对应的表,即:建库和建表,通过db.create_all()方法实现

  2. 数据库和表一旦创建后,之后对模型的改动不会自动作用到实践的表中,直接调用create_all()也不会更新。需要调用db.drop_all()方法删除数据库和表,然后调用db.create()方法创建。注意:这种方式不会保存表中的数据

5.4数据库操作

  1. 对数据库的操作通过数据库会话进行,数据库会话是个临时存储区,改动都存在这里。db.session

  1. 调用add()方法将创建的对象加到会话中,只有对会话调用commit()方法,改动才提交到数据库,也可以调用rollback()完成回滚操作

5.4.1CRUD

  1. Create主要分三步

    • 实例化模型类作为一个记录。note=Note(...)

    • 将记录加到数据库回话中。db.session.add(note),也可以使用add_all()一次包含所有记录对象的列表

    • 提交回话。db.session.commit()

  2. Read,模式:<模型类>.query.<过滤方法>.<查询方法>

  3. Update:直接赋值给模型类的字段属性就可以,然后调用commit()方法提交会话

  4. Delete:db.session.delete(模型实例),然后commit()提交会话

5.5.1配置python shell上下文

  1. 使用shell需要手动导入db对象和相应的模型类,使用app.shell_context_processor装饰器注册shell上下文处理函数

  2. 上下文处理函数需要返回包含变量和变量值的字典

5.5.2一对多、多对一

  1. 首先定义外键:外键只能存储单一数据(标量),实例化db.Column()是传入db.ForeignKey(表名.主键字段名),外键总是定义在多的那侧。注意:这里是表名,不是模型类的名称

  2. 再定义关系属性:不使用Column类声明列,而使用db.relationship()关系函数定义关系属性,这个属性返回多个记录,一般称为集合关系属性

    • relationship()函数的第一个参数为关系另一侧的模型名称注意:这里是模型名称,不是表名

  1. 建立关系

    • 为外键字段赋值

    • 操作关系属性,集合关系属性可以像列表一样操作。foo.articles.append()建立关系。foo.articles.remove()解除关系

  1. 双向关系:给relationship()函数设置back_populates参数,值为另一侧的关系属性名注意:这个参数是显式设置双向关系,还有隐式设置的参数

5.5.4一对一

  1. 关系两侧都设置标量关系属性即可

5.5.5多对多

  1. 需要再创建个关联表,关联表不存储数据,只用来存储关系两侧模型的外键对应关系。

  2. 关联表使用db.Table类定义,传入第一个参数是关联表名称,在关联表中定义了两个外键字段

  3. 模型类中定义关系属性,除了第一个参数是另一侧的模型名称外,还需要添加secondary参数,把这个值设为关联表的名称。

5.6Flask-Migration

  1. 实例化Migrate类时,传入程序实例app和db对象

5.6.2Flask-Migrate迁移数据库

  1. 先创建迁移环境:使用flask db init命令,迁移环境只需创建一次,会在根项目中创建migrations文件夹

  2. 再生成迁移脚本:使用flask db migration -m ‘提示信息’。-m参数用来添加迁移备注信息。

  3. 更新数据库:flask db upgrade

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐