SQLAlchemy建立数据库模型之间的关系

常见关系: 一对多关系 多对一关系 多对多关系 一对一关系 一对多关系(一个作者,多篇文章) 123456789101112131415161718192021222324252627282930## 一对多关系,单作者-多文章,外键不可少## 外键(ForeignKey)总在多的那边定义,关系(relationship)总在单的那边定义class Author(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(70), unique=True) phone = db.Column(db.String(20)) # articles为关系属性(一个集合,可以像列表一样操作,在关系的出发侧定义 ## relationship()函数的第一个参数为关系另一侧的模型名称(Article) articles = db.relationship('Article')class Article(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(15), index=True) body = db.Column(db.Text) # 传入ForeignKey的参数形式为:"表名.字段名" ## 模型类对应的表名由Flask-SQLAlchemy生成,默认为类名称的小写形式,多个单词通过下划线分隔 author_id = db.Column(db.Integer, db.ForeignKey('author.id')) ## 外键字段(author_id)和关系属性(articles)的命名没有限制## 建立关系可通过操作关系属性进行>>>shansan = Author(name="shansan")>>>hello = Article(title="Hello world !")>>>boy = Article(title="Hello Boy !")>>>db.session.add(shansan) # 将创建的数据库记录添加到会话中>>>db.session.add(hello)>>>db.session.add(boy)>>>shansan.articles.append(hello) # 操作关系属性>>>shansan.articles.append(boy)>>>db.session.commit()

Flask

Flask的请求钩子与上下文简记

请求钩子(Hook) 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在请求开始时,建立数据库连接;在请求结束时,指定数据的交互格式。为了让>每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。通过请求钩子,我们可以对请求进行预处理(preprocessing)和后处理>(postprocessing)。 Flask的请求钩子通过装饰器实现,每个钩子可以注册任意多个处理函数,默认的五种请求钩子如下: 钩子 说明 before_first_request 注册一个函数,在处理请求前运行 before_request 注册一个函数,在处理每个请求前运行 after_request 注册一个函数,如果有未处理的一场抛出。会在每个请求结束后运行 teardown_request 注册一个函数,即使有未处理的异常抛出,会在每个请求介绍后执行。如果发生异常,会传入异常对象作为参数注册到函数中 after_this_request 在视图函数内注册一个函数,在这个请求结束后运行

Flask

Jinja2语法小记

jinja2模板语法小记 Jinja2模板中文文档 三种常见界定符 表达式 {{ ... }} 用于装载字符串、变量、函数调用等 语句 {% ... %} 用于装载控制语句,比如if判断、for循环等 注释 {# ... #} 用于装载一个注释,模板渲染的时候会被忽略掉

Flask