首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL笔记(1)——MySQL创建数据

这样插入、更新或删除数据时,MySQL 数据库会自动检查是否符合约束条件,从而保证了之间的数据一致性。...因为约束的作用是确保参考的某一列值必须存在于当前的某一列,所以参考的该列必须设置为唯一的且非空。...约束:可以确保中指向其他的字段只包含该存在的值。约束还可以防止删除数据时出现意外情况(例如删除了被其他所引用的数据)。...例如,可以使用检查约束确保一个日期字段始终是当前日期之后的日期。 默认值约束:可以为某个字段指定默认值,插入数据时如果没有写入该字段,则会自动填充默认值。...因此,开发添加MySQL约束名时,请务必确保每个约束名称都与实际存储在数据的名称相匹配。此外,应避免使用太长或含义不明的名称,以便在未来快速定位约束问题。

3K20

SqlAlchemy 2.0 中文文档(一)

当我们声明相互关联的时,SQLAlchemy 不仅使用这些约束声明数据库发送 CREATE 语句时将其发送出去,而且还用于帮助构造 SQL 表达式。...元数据结构也不必包含、列或其他本地应用程序不需要的预先存在数据的约束和构造。...当我们声明相互关联的时,SQLAlchemy 使用这些约束声明的存在,不仅在将它们发射到数据库的 CREATE 语句中,还用于辅助构建 SQL 表达式。...当我们声明彼此相关的时,SQLAlchemy 使用这些约束声明的存在不仅使它们数据库发送 CREATE 语句时被发射,而且还有助于构建 SQL 表达式。...元数据结构也不必包括、列或其他预先存在数据不需要的约束和结构,本地应用程序不需要。

11810
您找到你想要的搜索结果了吗?
是的
没有找到

SqlAlchemy 2.0 中文文档(十七)

下表总结了本文讨论的调用形式: ORM 用例 使用的 DML 构造 使用以下方式传递数据 是否支持 RETURNING? 是否支持多表映射?...操作不提供 Python 的关系级联功能 - 假定任何需要的引用都已配置为 ON UPDATE CASCADE 和/或 ON DELETE CASCADE,否则如果强制执行引用,则数据库可能会发出完整性违规...'fetch' - 通过执行 UPDATE 或 DELETE 之前执行 SELECT 或使用 RETURNING(如果数据库支持)来检索受影响行的主键标识,以便受操作影响的内存对象可以使用新值刷新(更新...'fetch' - 通过执行 UPDATE 或 DELETE 之前执行 SELECT 或通过使用数据库支持的 RETURNING 来检索受影响行的主键标识,以便可以刷新受操作影响的内存的对象(更新)...'fetch' - 通过执行 UPDATE 或 DELETE 之前执行 SELECT 或使用 RETURNING(如果数据库支持),检索受影响行的主键标识,以便可以使用新值刷新受操作影响的内存对象(更新

17010

SqlAlchemy 2.0 中文文档(三十八)

数据用作将此与通过引用的其他关联的关联点。它还可以用于将此与特定的Connection或Engine关联起来。...注意,这 不会 自动关系数据库中生成约束,对于已经存在数据。要向现有的关系数据添加约束,必须使用 SQL ALTER 命令。...元数据用作将此其他通过引用的关联的点。它也可以用于将此与特定的 Connection 或 Engine 关联起来。...通常,之间的依赖关系是通过对象确定的。然而,对于创建以外的其他情况(规则、继承),可以手动建立这样的链接。...请注意,这不会自动关系数据库中生成约束,对于已经存在数据。要向现有的关系数据添加约束,必须使用 SQL ALTER 命令。

10910

Python自动化开发学习12-Mari

你可以使用主键来查询数据用于关联两个。 复合: 复合(组合)将多个列作为一个索引,一般用于复合索引。 索引: 使用索引可快速访问数据的特定信息。...无法record插入student存在的student_id,这个叫约束 尝试删除记录: > DELETE FROM record WHERE day='2018-01-01' AND...由于上面建立的2张建立了关联,record的student_id一定是student的,所以上面 JOIN 语句使用 LEFT 是不会有更多记录的。...除了最后一句create_all可以写(写上也没事,这句是创建,但是已经存在的情况下,不会创建也不会报错) 暂时不要用中文,使用中文的方法最后 插入数据: from sqlalchemy import...实际使用的时候,创建的时候把类定义好(即使已经存在也定义一下),其他操作的时候直接import这个类就好了。

2.7K10

SqlAlchemy 2.0 中文文档(十)

Mapper 定义 Python 类与数据其他关系结构之间的关联,以便对该类进行的 ORM 操作可以继续进行。...表示具有一些 NULL 值的复合主键应被视为可能存在数据。这会影响映射器是否将传入的行分配给现有标识,以及 Session.merge() 是否首先检查数据特定主键值。...当为True时,假定已在将此映射器的与其超类表链接的关系上配置了 ON DELETE CASCADE,以便当工作单元尝试删除实体时,只需为超类发出 DELETE 语句,而不是为此发出 DELETE...如果实例的状态已过期,则调用此方法将导致数据检查以查看对象是否已被删除。如果行不再存在,则引发ObjectDeletedError。 此值通常也实例状态下以属性名称的形式找到。...如果实例的状态已过期,则调用此方法将导致数据检查以查看对象是否已被删除。如果行不再存在,则会引发ObjectDeletedError。

10410

python数据库操作mysql:pymysql、sqlalchemy常见用法详解

<options 其他参数: echo是否显示ORM转成实际sql语句的过程,echo=True为显 encoding为连接时使用的字符集 操作: 基本操作: 创建新 方法一: 使用declarative...插入 数据【这里仅针对使用declarative_base创建的,对于不是程序才创建的,可以自己使用declarative_base建一个类来映射之前,只要映射一致,就能插入数据】 1.连接数据库...: 使用foregin_key创建 类的relationship的作用:帮助ORM获知他们的关系,以便ORM使用获取相关数据 relationship的backref的用途:relationship...,为了避免ORM混淆多个relationship,特别的标注哪个是哪个relationship relationship的secondary的用途:多对多的关系,填入的值是中间,维持两边关系...:当你建成功而插入数据失败时,可以尝试先删除掉数据,有时候因为依赖会导致插入失败 #负责导入连接数据库的对象 from sqlalchemy import create_engine from

3.6K10

SqlAlchemy 2.0 中文文档(三十六)

典型情况下,使用单个参数字典,新传入的将替换前一个构造的相同基于列表的“多值”构造,每个新的值列表都会被扩展到现有的值列表上。...此 FROM 子句返回的列的顺序应与作为 names 参数发送的列的顺序相对应;虽然传递给数据之前不会检查这一点,但如果这些列列表不对应,数据库通常会引发异常。...)未在名称列表另行指定的值,以便这些值也包含在要插入数据。...从此 FROM 子句返回的列的顺序应与作为names参数发送的列的顺序相对应;虽然传递给数据之前不会检查这一点,但如果这些列列表不对应,数据库通常会引发异常。...,以便这些值也包含在要插入数据

13210

SqlAlchemy 2.0 中文文档(二十五)

使用relationship()映射的属性的访问将尝试使用此Session作为连接源从数据库加载值。值将根据此对象上存在和主键值加载 - 如果不存在,则这些关系将不可用。...当 ORM 正常使用时,Session.enable_relationship_loading()不会改善行为 - 对象引用应该在对象级别而不是在外级别构建,以便它们 flush()继续之前以普通方式存在...通过relationship()映射的属性访问将尝试使用此Session作为连接的源来从数据库加载值。这些值将根据此对象上存在和主键值进行加载 - 如果不存在,则这些关系将不可用。...Session.enable_relationship_loading()正常使用 ORM 时不会改善行为 - 对象引用应该在对象级别构建,而不是在外级别构建,以便它们 flush()继续之前以普通方式存在...请注意,高度隔离的事务将返回与之前同一事务读取的相同值,而不管事务数据库状态的更改如何。 要使单个对象及其上的单个属性过期,请使用Session.expire()。

8410

SqlAlchemy 2.0 中文文档(三十九)

Table对象的应用程序以及迁移场景(尤其是使用 Alembic Migrations 检测新约束时)引起问题。...此标志指示列是否具有某种数据库端的 “autoincrement” 标志。 SQLAlchemy 其他类型的列也可以充当 “autoincrement” 列,而不一定在它们身上具有这样的标志。...Table对象的应用程序造成问题,以及迁移场景,特别是使用 Alembic 迁移检测新约束时。...Table对象的应用程序内以及迁移方案引起问题,特别是使用 Alembic Migrations 检测新约束时。...此标志指示列是否具有某种数据库端的“自动增量”标志。 SQLAlchemy 其他类型的列也可能充当“自动增量”列,而不一定在其上具有这样的标志。

11610

SqlAlchemy 2.0 中文文档(二十四)

这是一个不一致性问题,关系型数据通过使用“两阶段事务”解决,它在提交序列增加了一个额外的“准备”步骤,允许多个数据实际完成事务之前同意提交。...SQLite 将 RETURNING 与触发器组合使用存在限制,因此 RETURNING 子句将不会包含插入的值 其他后端可能在与触发器一起使用 RETURNING,或者其他类型的服务器生成值时存在限制...include_collections – 表示是否应该包含多值集合在操作。将其设置为False是一种仅检测基于本地列的属性(即标量列或多对一)的方法,这些属性刷新时会导致此实例的更新。...请注意,高度隔离的事务将返回与之前同一事务读取的相同值,而不管该事务之外的数据库状态是否发生变化。 要使单个对象以及这些对象上的单个属性过期,请使用 Session.expire()。...实际上,这是一个更昂贵且更准确的版本,用于检查给定实例是否Session.dirty集合;对于每个属性的净“脏”状态进行了全面测试。

14810

SqlAlchemy 2.0 中文文档(十五)

这两种用例是: 一个包含对自身的,而且单个行将具有指向其自身主键的键值。 两个都包含对另一个引用,每个的一行引用另一个的另一行。...对于强制实施引用完整性的数据库,最佳策略是使用数据库的ON UPDATE CASCADE功能,以便将主键更改传播到引用的 - 事务完成之前,值不能不同步,除非约束标记为“可延迟”。...对于强制执行引用完整性的数据库,最佳策略是使用数据库的 ON UPDATE CASCADE 功能,以便将主键更改传播到引用的 - 除非约束被标记为“可延迟”,即执行直到事务完成,否则值不能在任何时刻不同步...模拟无支持的有限 ON UPDATE CASCADE 使用不支持引用完整性的数据库且存在可变值的自然主键的情况下,SQLAlchemy 提供了一种功能,允许已经引用了的情况下将主键值传播到一个有限程度...relationship.load_on_pending标志在 ORM 正常使用时不会改善行为 - 对象引用应在对象级别构造,而不是在外级别构造,以便它们刷新进行之前以普通方式存在

8610

SqlAlchemy 2.0 中文文档(三十三)

这种方法绕过了标准的引用完整性实践,因为“”列实际上不被约束以引用任何特定的;相反,应用程序逻辑中使用逻辑来确定引用的是哪个。...关联包含一个“鉴别器”列,用于确定每个关联的行与哪种类型的父对象相关联。 generic_fk.py - 展示了所谓的“通用”,类似于流行框架(如 Django、ROR 等)的做法。...这种方法绕过了标准的参照完整性实践,因为“”列实际上并没有约束到任何特定的;相反,应用程序逻辑用于确定引用的是哪个。...关联包含一个“区分符”列,用于确定哪种类型的父对象与关联的每个特定行关联。 generic_fk.py - 演示了所谓的“通用”,类似于流行框架(如 Django,ROR 等)的方式。...演示将为数据文件创建一个本地目录,插入初始数据,然后运行。第二次运行演示将利用已经存在的缓存文件,并且只会发出一条 SQL 语句针对两个 - 但显示的结果将利用数十个从缓存获取的延迟加载。

12110

SqlAlchemy 2.0 中文文档(三十七)

典型情况下,这些类包含对引擎、会话或表达式构造的引用,因此可以直接序列化。 完全从序列化结构加载的数据(即在应用程序尚未声明的元数据)。...序列化器模块专门用于相反的情况,即数据已经存在于内存的情况。...创建此键之前,访问者应首先检查“_annotations”字典是否为非 None。 attribute dp_anon_name = 'AN' 访问可能“匿名化”的字符串值。...例如,名和列名,绑定参数,特殊关键字如“UNION”,“UNION ALL”。 字符串值被认为缓存生成是重要的。...SQLAlchemy 查询和对象映射操作的核心由 数据库元数据 支持,它由描述其他模式级对象的 Python 对象组成。

15510

SqlAlchemy 2.0 中文文档(十二)

处理多个连接路径 处理的最常见情况之一是两个之间存在多个路径时。...当存在显式连接条件时,这些函数可能更加简洁,并且还标记了“”或“远程”列的确切位置,无论该列是否多次声明或在复杂的 SQL 表达式声明: from sqlalchemy.orm import foreign...使用自定义表达式意味着我们可以生成遵循通常的主键/模型的非正统连接条件。其中一个例子是实现路径模式,其中我们比较字符串以产生重叠路径标记,以便生成树结构。...重叠的 很少见的情况可能会出现,即使用复合以便单个列可能是通过约束引用的多个列的主题。...使用自定义表达式意味着我们可以生成遵循通常的主键/模型的非正统连接条件。其中一个例子是材料化路径模式,我们比较字符串以产生重叠路径标记时,以便生成树结构。

7910

SqlAlchemy 2.0 中文文档(二十二)

使用 ORM 关系的 ON DELETE 级联 使用 ON DELETE 与多对多关系 删除孤儿 合并 刷新过期 清除 关于删除 - 删除从集合和标量关系引用的对象的注意事项...通过事件跟踪事务状态 将会话加入外部事务(例如用于测试套件) 其他持久化技术 将 SQL 插入/更新表达式嵌入到刷新 会话中使用 SQL 表达式 强制将具有默认值的列设置为...当相关对象包含指向要删除对象的约束,并且它们所属的相关集合目前未加载到内存时,工作单元将发出 SELECT 语句以获取所有相关行,以便它们的主键值可用于发出这些相关行的 UPDATE 或 DELETE...如果存在,则尝试本地标识映射中定位该实例。如果 load=True 标志保持默认设置,则还会检查数据是否存在此主键,如果在本地找不到,则检查数据是否存在此主键。...大多数Session.merge()问题可以通过首先检查 - 对象是否过早地会话

11110

Flask数据库过滤器与查询集

一对多关系,要在多这一侧加入一个,指向一这一侧联接的记录,即relationship()声明出现在代表少那个类,而外声明出现在代表多的那个类。...address连接了两行。...如果无法决定,你就要为db.relationship()提供额外参数,从而确定所用,常用的配置选项如下所示: backref:关系的另一个模型添加反向引用 primary join:明确指定两个模型之间使用的联结条件...自引用关系 多对多关系我们的Web应用可以用来实现用户之间的关注,但是在上面的文章和标签的例子,关联连接的是两个明确的实体,而在用户关注其他用户时,都在users内,只有一个实体。...这种信息只能存储关联,但是之前实现的学生和课程之间的关系,关联完全是由SQLAlchemy掌控的内部

6.8K10

SqlAlchemy 2.0 中文文档(五)

插件将在调用 .prepare() 的目标的子类树搜索,并反射所有由声明类命名的;目标数据不属于映射的,且不通过约束与目标表相关的将不会被反射。...插件将在调用.prepare()的目标的子类树搜索,并反射所有由声明的类命名的;不是映射的目标数据,也不是通过约束与目标表相关联的将不被反射。...需要映射的反射表包含主键约束的情况下,以及映射对任意可选择内容的情况下,主键列可能不存在的一般情况下,提供了 Mapper.primary_key 参数,以便将任何一组列配置为的“主键”,就 ORM...插件将针对调用 .prepare() 的目标的子类树搜索,并反射所有由声明类命名的;不属于映射的目标数据,也不通过约束与目标表相关联的将不被反射。...插件将针对调用 .prepare() 的目标的子类树搜索,并反射所有由声明类命名的;不属于映射的目标数据,也不通过约束与目标表相关联的将不被反射。

9410

SqlAlchemy 2.0 中文文档(三)

这要求我们 VALUES 子句中引用Table对象,以便引用其他: >>> update_stmt = ( ......类的实例代表行 在前面的示例,我们使用 Python 字典发出了一个 INSERT,以指示我们想要添加的数据,而使用 ORM 时,我们直接使用了我们定义的自定义 Python 类,使用 ORM 声明式表单定义数据回到之前...这是可能的,因为User类包含了一个由 ORM 映射提供的自动生成的__init__()构造函数,以便我们可以使用列名作为构造函数来创建每个对象。...另请参阅 delete - 描述了如何调整 Session.delete() 的行为,以便处理其他相关行的方式。...使用一些复杂的语法将行插入到user_account和address以便自动将address.user_id列与user_account行的列关联起来。

11520
领券