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

当has_many: primary_key不是数据库中的primary_key时使用它

是为了在关联模型中使用非默认的外键。在Rails中,has_many关联默认使用关联模型的主键作为外键,但有时候我们希望使用其他字段作为外键。这种情况下,我们可以使用has_many: primary_key选项来指定非默认的外键。

使用has_many: primary_key选项的语法如下:

代码语言:txt
复制
has_many :associated_models, primary_key: 'custom_foreign_key'

其中,:associated_models是关联模型的名称,'custom_foreign_key'是关联模型中的字段名,它将作为外键。

使用has_many: primary_key选项的优势是可以灵活地定义关联模型之间的关系,不局限于默认的主键关联。这样可以更好地满足特定业务需求。

has_many: primary_key选项的应用场景包括但不限于以下情况:

  • 当关联模型中的外键不是默认的主键时,可以使用has_many: primary_key选项来指定非默认的外键。
  • 当需要在关联模型中使用其他字段作为外键时,可以使用has_many: primary_key选项来定义关联关系。

以下是腾讯云相关产品和产品介绍链接地址的推荐:

  • 腾讯云数据库MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云数据库SQL Server:https://cloud.tencent.com/product/cdb_sqlserver
  • 腾讯云数据库MongoDB:https://cloud.tencent.com/product/cdb_mongodb
  • 腾讯云对象存储COS:https://cloud.tencent.com/product/cos
  • 腾讯云云服务器CVM:https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务TKE:https://cloud.tencent.com/product/tke
  • 腾讯云人工智能AI:https://cloud.tencent.com/product/ai
  • 腾讯云物联网IoT Hub:https://cloud.tencent.com/product/iothub
  • 腾讯云移动开发MPS:https://cloud.tencent.com/product/mps
  • 腾讯云区块链BCS:https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/product/mu
相关搜索:为什么我会得到:未定义的方法`primary_key‘for Hash:Class using invite!当邀请用户时当tkinter中的entrybox为空时,如何禁用它?当存在has_many关系时,如何在Rails中返回不同的记录?当映射到一个类型时,如何使键不是只读的?当点击向上箭头而不是^[[C中的A]时,使输入恢复到以前的输入当数据在codeigniter中具有相同的值时,使rowspan仅当满足条件时才使MongoDB中集合中的文档过期当R中粘贴的列中存在NA时,使粘贴列值为NA使React中的材质UI组件在滚动时粘滞(而不是AppBar)当满足特定条件时,如何使Django表单中的字段成为只读?输出"function toUpperCase() { [native code] }“而不是所需输出的"toUpperCase”问题。当达到某个值时,使循环停止当数据帧中的日期不连续时,如何使图的x轴连续日期?当list-style为none时,使HTML列表中的文本缩进以换行当模型不是文件而是目录时,django中的AUTH_PROFILE_MODULE值为什么在使用new/save而不是create时,has_many到的连接表没有在rails中创建?当数据库中的记录为空时,在HTML上向用户显示消息而不是空JSON当搜索条目是部分时,查询显示结果,而不是当它是字面意义上的数据库条目时ValueError:当保存到PostgreSQL数据库时,ndarray不是Pickle.dumps()的C连续错误当其他menuItems左对齐时,如何使水平菜单中的(Antd)子菜单右对齐?当尝试在组件的ts中初始化MapboxGeocoder时,"MapboxGeocoder不是构造函数“
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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`集合过期,以便在下一次访问重新获取

18610

SqlAlchemy 2.0 中文文档(十一)

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

18410
  • SQL学习笔记之简易ORM

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

    34710

    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和相关类型情况。

    18810

    SqlAlchemy 2.0 中文文档(九)

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

    24310

    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()结合使用方式与基本关系模式描述相同。...存在此选项,行为是未定义

    44720

    SqlAlchemy 2.0 中文文档(六)

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

    34810

    python学习笔记SQLAlchemy

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

    3.1K30

    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

    SqlAlchemy 2.0 中文文档(五十五)

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

    40310

    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 约束现有行为之外

    29710

    优酷项目之 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

    78410

    orm

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

    61231

    Django基础——ORM字段和字段参数

    c.related_name -->  反向操作,使用字段名,用于代替原反向查询'表名_set'。   ...(AutoField) - bigint自增列,必须填入参数 primary_key=True 注:model如果没有自增列,则自动会创建一个列名为id列...使用字段名,用于代替原反向查询'表名_set'。... 一张表某一些字段查询比较频繁,另外一些字段查询不是特别频繁   把不怎么常用字段 单独拿出来做成一张表 然后用过一对一关联起来 2....ORM用法   OneToOneField(to="") 举例:作者和作者详情是一对一;跟一对多,用法相同,只不过detail里面的不能重复;在数据库也是多一个detail_id 字段 总结

    1.6K20

    SqlAlchemy 2.0 中文文档(五)

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

    25110
    领券