父模板 如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中。 标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。...4.数据库 ORM框架: 作用:将模型类和数据表进行对应,通过面向对象的方式进行数据库的操作。 flask中SQLALchemy Django中自带ORM框架,可以直接进行使用。...,参数同DateField DateTimeField 日期时间,参数同DateField FileField 上传文件字段 ImageField 继承于FileField,对上传的内容进行校验,确保是有效的图片...AutoField的选项使用 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理...,在django.db.models中包含了可选常量: CASCADE 级联,删除主表数据时连通一起删除外键表中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
三级模式(外模式(视图)、模式(基本表)、内模式(索引))、两级映射(外模式/模式映射、模式/内模式映射) 模式:是对数据库中全部数据的逻辑结构和特征的描述,是所有用户的公共数据视图 外模式:是局部数据的逻辑结构和特征的描述...按照数据结构的类型来命名数据模型 (层次结构、网状结构和关系结构的模型分别命名为层次模型、网状模型和关系模型) 三要素(三个组成部分):数据结构(静态特征描述)、数据操作(动态特征)、数据完整性约束。...常见三种数据模型: -|层次模型:用树形(层次)结构描述 实体和实体间联系。...-|网状模型:允许多个结点没有双亲结点,也允许一个结点有多个双亲结点,方便地表示各种类型的联系(无向图)(性能和效率 高,但是复杂) -|关系模型:数据结构:二维表格结构表示实体、实体间联系...关系模型重要概念:关系(二维表)、元组(行)、属性(列)、域(取值范围)、关键字或主码(唯一表示元组的属性)、候选关 键字或候选码(多个具有主码特征的属性)、主属性(所有候选码均匀此属性)、外键或外码(
# 注意默认继承并不会报错,它会将多个模型的数据映射到一张表之中,不好之处是可能导致数据混乱并不能满足基本使用,而抽象模型正好解决该问题,它不会在数据库中产生映射; __abstract__ = True...) 在筛选中offset与limit是不区分顺序的, 并且order_by必须放在前两者之前; 创建库表,库手动创建,而表采用SQLAlchemy对象 create_all ,删除则通过drop_all...\Day3> WeiyiGeek.模型继承 2.级联数据与外键 描述:级联数据之外键间的关系 1:1 ForeignKey + Unique 1:M ForeignKey M:N 额外扩充的关系表即多个...ForeignKey 基础实例: 1.外键与外键反向引用的模型构建 2.使用关系 relationship 进行外键的反向引用即级联查询; # Day3\App\models.py # 例如以下数据库模型的声明...创建外键后进行数据库字段迁移升级: PS E:\githubProject\Study-Promgram\Python3\Flask\Day3> python .
主键、外键和索引的区别?...主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值 作用: 用来保证数据完整性 用来和其他表建立联系用的...是提高查询排序的速度 个数: 主键只能有一个 一个表可以有多个外键 一个表可以有多个惟一索引 聚集索引和非聚集索引的区别?...创建外键: ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列...POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.
URL 必须是保存在 Flask 对象 SQLALCHEMY_DATABASE_URI 键中,配置对象中还有一个很有用的选项,即 SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为...下面是一些常用的列选项 ? 表关系 在我们当前的数据模型下,角色与用户是一对多的关系,一个角色可以属于多个用户,而一个用户只可以是一个角色。...这一属性可替代 role_id 访问 Role 模型,此时获取的是模型对象,而不是外键的值。 添加到 User 模型中的 role_id 列被定义为外键,就是这个外键建立起了关系。...数据库迁移 在开发程序的过程中,我们会发现有时需要修改数据库模型,而且修改之后还需要更新数据库。 仅当数据库表不存在时,Flask-SQLAlchemy 才会根据模型进行创建。...,我们就留到后面的内容中慢慢学习吧 这部分完整代码,可以检出5a 总结 本节我们学习了数据库相关的内容,从 SQLAlchemy 到 flask_SQLAlchemy,以及如何在视图函数中使用,还有更加方便的迁移数据库等等知识
多对一关系(Many-to-One Relationship): 多个表中的记录对应到另一个表中的唯一记录。 适用于多个实体需要关联到同一个实体的情况。...多对多关系(Many-to-Many Relationship): 多个记录在一个表中可以关联到多个记录在另一个表中。 通常通过中间表(关联表)来实现,记录表之间的复杂关系。...自连接 自连接(Self-Join)是指在同一个表中进行连接操作,将表视为两个独立的实例,通过某个字段的值在同一表中建立关联。自连接通常用于处理具有层次结构的数据,例如组织架构表或分类表。...分类体系: 处理具有层次结构的分类表,例如产品分类,可以使用自连接检索父子级别之间的关系。 自连接使得在同一表中查找相关的信息变得简便,但需要小心确保连接条件的准确性,以避免产生不正确的结果。...复杂业务逻辑: 支持复杂的业务逻辑和数据分析需求,例如跨越多个实体的数据分析、报表生成等。 数据一致性: 通过外键关系等约束,确保不同表之间的数据一致性,防止了数据不一致和错误。
创建属性来映射到表中的字段,所有需要映射到表中的属性都应该为Column类型 使用Base.metadata.create_all()来将模型映射到数据库中。...在这个ORM模型中创建一些属性,来跟表中的字段进行一一映射。这些属性必须是sqlalchemy给我们提供好的数据类型。...外键和四种约束 使用SQLAlchemy创建外键非常简单。在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了。从表中外键的字段,必须和父表的主键字段类型保持一致。...RESTRICT:父表数据被删除,会阻止删除。默认就是这一项。 2. NO ACTION:在MySQL中,同RESTRICT。 3. CASCADE:级联删除。 父删子删 4....注意:字段属性不能有nullable=False id = Column(Integer, ForeignKey("user.id", ondelete="RESTRICT")) 注:如果要使用外键,则数据库的引擎必须为
比如模型与模型之间的一种关联,根据角色查询属于这个角色的用户有哪些 # 这里的设计不像外键是根据表的实际情况考虑,而根据模型考虑的 # User 是让role对象可以获得user中的属性...添加到address模型中person_id列被定义为外键,就是这个外键建立起了联系。传给db.ForeignKey()的参数’person_id’表明,这一列的值是person表中行的id值。...大多数情况下,db.relationship()都能自行找到关系中的外键,但有时却无法决定把哪一列作为外键。...但是两侧都是多的关系,显然不能通过一个简单的外键来实现。解决办法是添加第三张表。 多对多关系一个典型的例子是文章与标签之间的关系,一篇文章可以有多个标签,一个标签也可以对应多篇文章。...删除对象时,默认的层叠行为是把对象联接的所有相关对象的外键设为空值。但在关联表中,删除记录后正确的行为应该是把指向该记录的实体也删除,因为这样能有效销毁联接。
它存储在你必须创建的 SQLAlchemy 实例上。...__函数,来返回呈现一个值 db.create_all()表示创建所有的表 运行创建 $ python models.py 没有报错就创建好了 ?...进阶 有很多的表,各个一些表之间有外键相关联的情况 如图,相对很复杂的ER图 ?...如图大部分的外键都是,一个表的id对于另外一个表的相对应的id 代码如下 # -*- coding: utf-8 -*- # @Time : 2018/5/16 14:59 # @Author...接下来就是userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id 运行创建
它存储在你必须创建的 SQLAlchemy 实例上。...repr函数,来返回呈现一个值 db.create_all()表示创建所有的表 运行创建 $ python models.py 没有报错就创建好了 [artcms.png] 进阶 有很多的表,各个一些表之间有外键相关联的情况...如图,相对很复杂的ER图 [ER.png] 如图大部分的外键都是,一个表的id对于另外一个表的相对应的id 代码如下 # -*- coding: utf-8 -*- # @Time : 2018...,上面代码可以看出,比如user表与userlog表(第一个与第二个类),user表中的userlogs表头是要userlog这个表建立联系,那么第一个参数就是对应的类的名称,backref后面跟的是本表的名字...接下来就是userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id 运行创建
想要解决这个问题,就要引用外键约束这个概念,将这两张表真真正正地关联起来。 如何添加外键约束? ? ①建表后添加外键约束 foreign key即为外键的意思。...references,参考的意思,这里可以理解成关联。 也就是说把成员表中的dept_id作为外键,同时与部门表中的id相关联。...这样的话,你想删除部门表中的某个部门,得保证成员表中没有该部门的成员。 ②建表时添加外键约束 一般来说,会在建表的时候就添加外键,格式是一样的。 其中: 部门表(1对多中的1)也叫主表。...成员表(1对多中的多)也叫从表。 也就是说想要删除主表中的数据,必须保证从表中和其相关的数据不存在。 其中一对一表设计和一对多是很相似的,就是任意一张表将另外一张表的id作为外键就可以了。...那么在多对多的表中是怎么将两张表关联起来的? ? 创建一个中间表,将这两个表关联起来。 中间表表名一般会将这两个表名结合起来,见名知意。 中间表有两个外键。 外键分别对应两张表中的主键。
一般是在建表的时候同时创建主键索引: 1.4 组合索引: 指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。...因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。...) 可以跟基本表一样,进行增删改查操作 3.视图的作用 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性 更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别...4.视图的使用场景 权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如工资 关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作 三.外键 1.定义 表的外键是另一表的主键,...外键可以有重复的, 可以是NULL 2.作用 用来和其他表建立联系用的 3.个数 一个表可以有多个外键 4.建议 引用自阿里Java开发手册:【强制】不得使用外键与级联,一切外键概念必须在应用层解决
openssl rand 60 | openssl base64 -A 在 Flask 中添加 Redis 的支持 在 Flask 中使用 Redis 可以直接使用 flask-redis 支持包,它是对...使用以下命令即可安装该支持包: pip install flask-redis flask-redis 的配置非常方便,只需要在配置文件中增加 REDIS_URL 的配置即可。...redis_client = FlaskRedis() ... redis_cline.init_app(app) 建议将 Redis 对象的获取同与 Flask 对象的挂载代码分开,便于代码的模块化结构...在 Flask 添加动态数据 首先创建使用 Redis 存储/获取动态数据的函数,代码如下: def mark_dyn_data(id, data): user_id = str(id).encode...Id 作为唯一表示,在读取时同样以用户 ID 作为标识来进行查询。
西顾博客 用到的包 flask下有一个叫flask_sqlalchemy的数据库框架,没有安装的可以使用下面的来安装 $ pip install -i https://pypi.douban.com/simple...它存储在你必须创建的 SQLAlchemy 实例上。...__函数,来返回呈现一个值 db.create_all()表示创建所有的表 运行创建 $ python models.py 没有报错就创建好了 进阶 有很多的表,各个一些表之间有外键相关联的情况 如图...,相对很复杂的ER图 如图大部分的外键都是,一个表的id对于另外一个表的相对应的id 代码如下 # -*- coding: utf-8 -*-# @Time : 2018/5/16 14:59#...接下来就是userlog表的类Userlog中的user_id的外键是user表中的id,外键通过db.Foreignkey()来建立外键,参数就是对应的表.表头,比如上面参数的user.id 运行创建
MySQL进阶主外键讲解 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的...所以说,如果谈到了外键,一定是至少涉及到两张表。例如下面这两张表: ? 上面有两张表:部门表(dept)、员工表(emp)。...Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dept_id找到对应的部门,然后才能找到部门表里的各种字段信息,从而让二者相关联。...所以说,外键一定是在从表中创建,从而找到与主表之间的联系;从表负责维护二者之间的关系。 2.外键的使用需要满足下列的条件:(这里涉及到了InnoDB的概念) 1....FOREIGN KEY:将从表中的字段1作为外键的字段。 REFERENCES:映射到主表的字段2。
ORM关系以及一对多: mysql级别的外键,还不够ORM,必须拿到一个表的外键,然后通过这个外键再去另外一张表中查找,这样太麻烦了。...先把两个需要做多对多的模型定义出来 使用Table定义一个中间表,中间表一般就是包含两个模型的外键字段就可以了,并且让他们两个来作为一个“复合主键”。...但是,如果数据项被设置为nullable=False的时候,删除会报错。 ORM层面删除数据,会无视mysql级别的外键约束。直接会将对应的数据删除,然后将从表中的那个外键设置为NULL。...如果想要避免这种行为,应该将从表中的外键的nullable=False。...在定义模型的时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用当前的模型的名字转换成小写来作为表的名字,并且如果这个模型的名字使用了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接
我们来分别看一下这几种情况下的SQL的复杂度以及DQL是怎么解决的 外键属性化 我们用前面提到的那个查询中国经理的美国员工的例子来看一下SQL要怎么写,员工表里有个部门外键字段指向部门表的主键,部门表里又有经理外键字段指回员工表...,字段有了子属性,子属性又有子属性,但并不难理解,也就是部门的经理的国籍是中国 在DQL的语法体系中,外键被看成了属性,外键指向表的字段可直接用子属性的方式引用,也允许多层和递归引用 同维表等同化 这是两个一比一的表...中,只要把这几个表分别按日期对齐分别汇总就行了,而不必关心这些表之间的关系,在增删表时也不容易发生遗漏 如果按维对齐再与外键搅到一起,情况就会更复杂: 我们希望按地区统计销售员人数和合同额 用SQL写出来是这样...,能让业务人员做JOIN的BI就做成了 有人可能会问,多表变一表,那不还是宽表吗?...,业务人员已经完全不用去管后台是几个表,怎么关联了,直接拖拽员工姓名,再拖拽部门经理姓名,然后再设置一下两个的国籍,就可以了 同维表关联 同样的,多表变一表,主键相同的表,像员工表,经理表;客户表,
4).创建连接多个数据库 app.config['SQLALCHEMY_BINDS']={ 'users': "mysql+pymysql://root:123456@127.0.0.1:3306/user...__name__,self.name) 2).一对多 我们需要建立一个主表和一个子表,分别命名为“father”和‘son’,然后需要建立外键和反射来互相引用建立一种关系,我们来看看: class father...db.Column(db.Integer,nullable=False) f_id=db.Column(db.Integer,db.ForeignKey('Father.id')) # 建立外键关联...db.Column(db.Integer,nullable=False) f_id=db.Column(db.Integer,db.ForeignKey('Father.id')) # 建立外键关联...__name__,self.name) 可以看出我们已经创建出了一张关联表,名字就是我们设置的“glb”。
例如有两个表 A(a,b) :a为主键,b为外键(来自于B.b) B(b,c,d) :b为主键 如果我把字段b的外键属性去掉,对编程没什么影响。 ...最后说一下,建键几个原则: 1、 为关联字段创建外键。 2、 所有的键都必须唯一。 3、避免使用复合键。 4、外键总是关联唯一的键字段。 ...比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。...二、主键、外键和索引的区别 定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值...作用: 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 索引--是提高查询排序的速度 个数: 主键--主键只能有一个 外键--一个表可以有多个外键 索引--一个表可以有多个唯一索引
mysql使用foreign key创建外键 说明 1、表中的foreign key指向另一表中的primary key。...2、外键foreign key用于约束破坏表格的连接动作,保证两个表格的数据完整性。 同时,还可以防止非法数据插入外部键列,因为该列必须指向另一个表格的主键。...Id_P int, PRIMARY KEY (Id_O), FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) ) 以上就是mysql使用foreign key创建外键
领取专属 10元无门槛券
手把手带您无忧上云