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

SqlAlchemy 2.0 中文文档(十二)

u1.all_tasks,然后使所有对象过期,因此当我们访问 u1.current_week_tasks 时,会发生 :term:惰性加载,从数据库中新鲜获取此属性的内容。...,然后使所有对象过期,这样当我们访问u1.current_week_tasks时,一个:term:延迟加载会发生,从数据库中重新获取该属性的内容。...在下面的示例中,Session.flush()将挂起的更改发送到数据库,然后使用Session.expire()使u1.current_week_tasks集合过期,以便在下一次访问时重新获取: >>>...,然后使所有对象过期,这样当我们访问`u1.current_week_tasks`时,一个:term:`延迟加载`会发生,从数据库中重新获取该属性的内容。...在下面的示例中,`Session.flush()`将挂起的更改发送到数据库,然后使用`Session.expire()`使`u1.current_week_tasks`集合过期,以便在下一次访问时重新获取

23510

SqlAlchemy 2.0 中文文档(十一)

假设数据库支持此功能,数据库本身可以被设置为在删除“child”中的引用行时自动删除“secondary”表中的行。...## 关系参数的延迟评估 在前面的部分中,大多数示例都说明了各种relationship() 构造是如何使用字符串名称而不是类本身来引用它们的目标类的,比如当使用Mapped时,会生成一个仅在运行时存在的字符串引用...,比如多个Child对象是挂起的并且不是数据库持久的情况。...在这里的一个性能较高的选项是使用数据库中使用的外键的 ON DELETE CASCADE 指令。假设数据库支持这个特性,数据库本身可以被设置为在“子”中的引用行被删除时自动删除“次要”表中的行。...这里的一个性能更高的选项是与数据库一起使用 ON DELETE CASCADE 指令。假设数据库支持这个功能,数据库本身可以被设置为在“子”中的引用行被删除时自动删除“辅助”表中的行。

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

    SQL学习笔记之简易ORM

    当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法。如果继承树可以找到该属性,则不调用此方法。  __setattr__会拦截所有属性的的赋值语句。...0x01 定义Field 数据库中每一列数据,都有:列名,列的数据类型,是否是主键,默认值。...__init__(name, 'int', primary_key, default_value) 0x02 定义元类 数据库中的每个表,都有表名,每一列的列名,以及主键是哪一列。...既然我要用数据库中的表,对应这一个程序中的类,那么我这个类也应该有这些类属性。 但是不同的类这些类属性又不尽相同,所以我应该怎么做?...__new__(cls,name,bases,attrs) 0x03 定义Model基类 Model类是所有要对应数据库表类的基类,每个数据库表对应类的对象,都应该有查询,插入,保存,方法。

    35510

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

    >>>db.session.add(shansan) # 将创建的数据库记录添加到会话中 >>>db.session.add(hello) >>>db.session.add(boy) >>>shansan.articles.append...) 在这里我们希望可以在Book类中存在这样一个属性:通过调用它可以获取对应的作者的记录,这类返回单个值的关系属性称为标量关系属性 # 建立双向关系时,关系两边都有关系函数 # 在关系函数中,我们使用back_populates...## 多对一关系中,外键和关系属性都在多的一侧定义 ## 这里的关系属性是标量关系属性(返回单一数据) class Citizen(db.Model): id = db.Column(db.Integer...关联表不存储数据,只用来存储关系两侧模型的外键对应关系 定义关系两侧的关系函数时,需要添加一个secondary参数,值设为关联表的名称 关联表由使用db.Table类定义,传入的第一个参数为关联表的名称...关系函数参数和常用的SQLAlchemy关系记录加载方式(lazy参数可选值) 使用关系函数定义的属性不是数据库字段,而是类似于特定的查询函数 当关系属性被调用时,关系函数会加载相应的记录 ?

    1.7K20

    SqlAlchemy 2.0 中文文档(七十三)

    当意识到一些非常难以定义的relationship()配置可能成为可能时,保留了一个非主映射器的用例,当一个具有替代可选择项的非主映射器被作为映射目标时,而不是尝试构建一个涵盖特定对象间关系所有复杂性的...UNIQUE (x) 目前还没有选项使名称通过以允许数据库端截断。...当数据库不使用符合 Unicode 标准的字符集时,可能需要使用NVARCHAR2和相关类型的情况。...当意识到一些非常难以定义的relationship()配置可能成为可能时,仍然存在一个非主映射器的用例,当一个具有替代可选择项的非主映射器被作为映射目标时,而不是尝试构建一个包含特定对象间关系所有复杂性的...当数据库不使用符合 Unicode 标准的字符集时,可能需要使用NVARCHAR2和相关类型的情况。

    24510

    SqlAlchemy 2.0 中文文档(七)

    我们预期id字段是由数据库生成的,根本不是构造函数的一部分: from sqlalchemy.orm import Mapped from sqlalchemy.orm import mapped_column...另请参阅 将转换为数据类时,属性来自不是数据类的超类。 - 关于原因的背景 关系配置 当与relationship()结合使用时,Mapped注释的使用方式与基本关系模式中描述的方式相同。...我们预期的由数据库生成的 id 字段根本不是构造函数的一部分: from sqlalchemy.orm import Mapped from sqlalchemy.orm import mapped_column...另请参阅 当将转换为数据类时,属性源自不是数据类的超类。 - 关于原因的背景 关系配置 Mapped注解与relationship()结合使用的方式与基本关系模式中描述的相同。...当存在此选项时,行为是未定义的。

    53520

    SqlAlchemy 2.0 中文文档(九)

    当映射器配置在继承关系中时,SQLAlchemy 有能力以多态方式加载元素,这意味着单个查询可以返回多种类型的对象。...换句话说,基类是“抽象的”。 通常,当想要将两个不同的子类映射到各自的表中,并且将基类保持未映射时,这可以很容易地实现。...为数据库中的特定行应用于此列的实际数据值是使用Mapper.polymorphic_identity参数指定的,如下所述。 虽然多态鉴别器表达式不是严格必需的,但如果需要多态加载,则需要。...换句话说,基类是“抽象的”。 通常,当一个人想要将两个不同的子类映射到各自的表中,并且保留基类未映射时,这可以非常容易地实现。...换句话说,基类是“抽象的”。 通常,当一个人想要将两个不同的子类映射到单独的表中,并且保留基类未映射时,这可以非常容易地实现。

    26810

    SqlAlchemy 2.0 中文文档(六)

    需要引用 Column 的构造将以 Table 对象的术语引用它。...(而不是命令式表 配置),则可以在混合中指定列,以便混合中声明的列随后将被复制为声明式进程生成的Table 的一部分。...## 使用混合和基类进行映射继承模式 在处理如映射类继承层次结构中记录的映射器继承模式时,当使用 declared_attr 时,可以使用一些附加功能,无论是与混合类一起使用,还是在类层次结构中增加映射和未映射的超类时...从多个混合类组合表/映射器参数 当使用声明性混合类指定 __table_args__ 或 __mapper_args__ 时,您可能希望将一些参数从多个混合类中与您希望在类本身上定义的参数结合起来。...版本 2.0 中的变化:声明式 API 现在可以接受 Column 对象以及任何形式的 mapped_column() 构造,当使用混合类时无需使用 declared_attr()。

    38710

    Django 系列博客(十三)

    当 model 中如果没有自增列,则会自动创建一个列名为 id 的列。 IntegerField 一个整数类型,范围在-2147483648 to 2147483647。...primary_key = True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import models class UserInfo(models.Model...数据库中字段的默认值 primary_key 数据库中字段是否为主键 db_index 数据库中字段是否可以建立索引 unique 数据库中字段是否可以建立唯一索引...to 设置要关联的表 related_name 反向查询时,使用的字段名,用于代替原反向查询时的'表名_set'。 symmetrical 仅用于多对多自关联时,指定内部是否创建反向操作的字段。...=True) book = models.ForeignKey(to=Book) author = models.ForeignKey(to=Author) 当业务需要在第三张关系表中存储额外的字段时

    1.1K30

    python学习笔记SQLAlchemy

    简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。 ?...__name__,self.username) Base.metadata.create_all(engine) 如果想使 Python 类映射到数据库表中,需要基于 SQLAlchemy 的 declarative...当基于此基类,创建 Python 类时,就会自动映射到相应的数据库表上。...我们创建了三个基本字段,类中的每一个 Column 代表数据库中的一列,在 Colunm 中,指定该列的一些配置。...一对一关系 在 User 中我们只定义了几个必须的字段, 但通常用户还有很多其他信息,但这些信息可能不是必须填写的,我们可以把它们放到另一张 UserInfo 表中,这样 User 和 UserInfo

    3.2K30

    SqlAlchemy 2.0 中文文档(五十五)

    当连接被使无效时,任何正在进行的Transaction现在处于无效状态,必须显式回滚以将其从Connection中移除。...也就是说,它表达了被删除的“孤儿”将是一个A对象,并且当引用它的每个B被删除时,它就成为一个“孤儿”。 “delete-orphan”级联模型不支持这一功能。...### IntegrityError 当数据库的关系完整性受到影响时引发的异常,例如外键检查失败。 此错误是 DBAPI 错误,源自数据库驱动程序(DBAPI),而不是 SQLAlchemy 本身。...也就是说,它表达了正在被删除的“孤立”将是一个A对象,当每个引用它的B都被删除时,它变成了“孤立”。 “delete-orphan”级联模型不支持此功能。...延迟加载是一种常见的对象关系模式,其中由 ORM 持久化的对象维护一个代理到数据库本身,因此当访问对象上的各种属性时,它们的值可能会被惰性地从数据库中检索出来。

    44310

    Django之模型---ORM简介

    共有下列额外的可选参数: Argument 描述 auto_now 当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 "last-modified...auto_now_add 当对象首次被创建时,自动将该字段的值设置为当前时间.通常用于表示对象创建时间. (仅仅在admin中有意义......MEDIA_ROOT 的哪个子目录保存上传文件.你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT)....一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名. 注意这个正则表达式只会应用到 base filename 而不是 路径全名....如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。

    1.5K10

    Django ORM (一) 创建数据库

    共有下列额外的可选参数: # Argument 描述 # auto_now 当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 "last-modified...# auto_now_add 当对象首次被创建时,自动将该字段的值设置为当前时间.通常用于表示对象创建时间. #(仅仅在admin中有意义......upload_to 选项,以告诉 Django # 使用 MEDIA_ROOT 的哪个子目录保存上传文件.你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT)...一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名....Field重要参数 (1) null : 数据库中字段是否可以为空 (2) blank: django的 Admin 中添加数据时是否可允许空值 (3) default:设定缺省值 (4) editable

    1.4K10

    SqlAlchemy 2.0 中文文档(七十五)

    当遇到相同标识的重复对象时,非主键属性会被覆盖,因为对象被遇到时是基本上是非确定性的。这种行为与持久对象的行为相匹配,也就是通过主键已经位于数据库中的对象,因此这种行为更具内部一致性。...当从数据库返回值时,结果处理方面也无条件地进行检查。 此验证是在使用非本地枚举类型时创建 CHECK 约束的现有行为之外的。...当遇到相同标识的重复对象时,非主键属性会在遇到对象时被覆盖,这本质上是非确定性的。这种行为与持久对象的处理方式相匹配,即通过主键已经位于数据库中的对象,因此这种行为更具内部一致性。...当从数据库返回值时,结果处理方面的检查也是无条件发生的。 这种验证是在使用非本地枚举类型时创建 CHECK 约束的现有行为之外的。...当从数据库返回值时,检查也会无条件地发生在结果处理方面。 此验证是在使用非本地枚举类型时创建 CHECK 约束的现有行为之外的。

    33110

    orm

    orm 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。...在对orm进行架构时首先要分清数据库和对象之间的映射关系: 对象与类 数据库 类名 表名 对象 一条记录 对象.属性 字段 这里将数据库的增删改查全部封装为一个个的方式,比如:save,delete,...__init__中定义新添加的字段名,这样太麻烦了。...元类需要处理的问题: 强制数据表类有且只有一个主键。 将数据表中所有的字段对象都存放在一个独立的字典中,方便取用。...class_dict['primary_key'] = primary_key #给类的名称空间添加mapping字典,字典中拥有所有的字段属性 class_dict

    62131

    SqlAlchemy 2.0 中文文档(七十八)

    ORM 自至少版本 0.4 以来就包含了这样的行为,即一个“挂起”的对象,意味着它与Session相关联,但尚未插入数据库,当它变成“孤儿”时,即已与引用它的父对象解除关联,并且在配置的relationship...直到 0.7 版本,这并不是这种情况,应用于InstrumentationEvents的任何事件监听器都将为所有映射的类调用。在 0.8 中,添加了额外的逻辑,使事件仅对发送的那些类调用。...当保持默认值False时,它会导致命中数据库,并经常触发自动刷新,这将改变结果。...ORM 自至少 0.4 版本以来已经包含了这样的行为,即一个“待定”对象,意味着它与Session相关联,但尚未插入到数据库中,当它成为“孤儿”时,即已经与引用它的父对象解除关联,并且在配置的relationship...- 当保持默认值 False 时,它会影响到数据库,并经常触发自动刷新,这将改变结果。

    15510

    优酷项目之 ORM(数据库对象关系映射)

    前言:   我们在操作数据库时候一般都是通过sql代码来操作mysql数据库中相关数据,这就需要懂得sql语句,那么怎么样才能在不懂sql语句的情况下通过我们所学的python代码来实现对mysql数据库的操作...对象点属性 =======> 记录某一个字段对应的值 上面关系分析: 通过python中创建类来实现对数据库一张表结构的关系产生一种一一对应关系 通过python中对创建的类实例化的对象操作对数据库一张表进行表记录的操作的一一对应关系...通过python中对象点属性的方式来操作记录表中某一字段的对应值,的一一对应操作关系 首先来通过代码层面来映射数据库表字段的类型: # 定义一个类,在映射数据库中的表结构: class Field(object...,但是参数不是类中属性,如果想要通过实例化出的对象点 # 这个参数key的方式得到value值的目的,可以使用__getattr__来实现,也就是说,实例化出的对象在点这个key # 时候...循环中,因为最初primary_key是None,当第一次找到primary_key时候,将primary_key赋值给该字段名,当下次在for循环 # 中找到primary_key同时primary_key

    78710

    SqlAlchemy 2.0 中文文档(五)

    ### 访问表和元数据 声明性映射类将始终包括一个名为__table__的属性;当使用上述使用__tablename__的配置完成时,声明过程会通过__table__属性使Table可用: # access...另请参阅 自动映射 自动从反射表中命名列方案 当使用任何以前的反射技术时,我们有选择通过列映射的命名方案。...我们可以将这些配置组合成mapped_column()实例,然后直接捆绑到Annotated的实例中,然后在任意数量的类声明中重新使用它们。...访问表和元数据 声明式映射的类将始终包括一个名为 __table__ 的属性;当使用 __tablename__ 进行上述配置时,声明过程通过 __table__ 属性使 Table 可用: # access...插件将在调用.prepare()的目标的子类树中搜索,并反射所有由声明的类命名的表;不是映射的目标数据库中的表,也不是通过外键约束与目标表相关联的表将不被反射。

    29710
    领券