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

从 Django 模型中根据类查找外键

在 Django 中,如果你有一个模型类,并希望找出哪些其他模型定义了指向该模型的外键,可以使用 Django 的元选项 (Meta) 和 ForeignKey 的反向关系属性。...1、问题背景在使用 Django 开发项目时,我们经常需要在不同的模型之间建立外键关系。...例如,在 Book 模型中,外键可能叫做 author_id, 而在 Article 模型中,外键可能叫做 author.我们希望有一个方法可以根据外键的类来检索外键对象,无论外键的名称是什么。...该方法返回了指向 Author 模型的外键字段,并将其存储在 author_foreign_key 变量中。问题背景Foo 有很多可以从 Django 模型引用的外键,但我希望使用通用方法来获取对象。...然后,它在 Book 和 Article 模型中使用 get_foo() 函数来获取指向 Foo 对象的外键。最后,它打印指向 Foo 对象的外键的名称。

8810

数据库使用外键会导致心脏不好?

原文作者:小柒 原文链接:https://blog.52itstyle.vip/archives/91/ 今天看了论坛的动态,有人说数据库使用外键会导致心脏不好,然后特意百度一一下,特此记录。...摘录网上讨论共同观点: 主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作, 矛盾焦点:数据库设计是否需要外键。...反方观点: 1,可以用触发器或应用程序保证数据的完整性 2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题 3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert..., update, delete 数据的时候更快) eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不 止一个字段有外键...结论: 1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。

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

    为什么不推荐数据库使用外键?

    我的经验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。 为什么这是一个问题?...2.表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议):下面的理由绝不鼓励不要在数据库中使用外键约束。...3.全表重新加载 一些数据库,如数据仓库,分段或接口数据库,需要经常从外部重新加载数据。这会导致重新加载时数据不一致(在父表为空的情况下,子表可能已满载)。这可以通过在重新加载时禁用外键来绕过。...这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。

    1.8K20

    为什么数据库不应该使用外键

    在通常情况下,我们都会使用关系表中的主键作为其他表中的外键,这样才可以满足关系型数据库对外键的约束。 ?...从 SQL 语句中的 CONSTRAINT 关键字我们也能推测出外键不是一种数据类型,它是不同关系表之间的约束。 ?...这里的基准测试只是一个比较简单的定量分析,但是我们也可以从结果中看到大概的趋势 — 外键的完整性检查确实会带来额外的性能开销,而这些开销在高并发的服务中需要慎重考虑。...总结 外键提供的几种在更新和删除时的不同行为都可以帮助我们保证数据库中数据的一致性和引用合法性,但是外键的使用也需要数据库承担额外的开销,在大多数服务都可以水平扩容的今天,高并发场景中使用外键确实会影响服务的吞吐量上限...我们可以从可用性、一致性几个方面分析使用外键、模拟外键以及不使用外键的差异: 不使用外键牺牲了数据库中数据的一致性,但是却能够减少数据库的负载; 模拟外键将一部分工作移到了数据库之外,我们可能需要放弃一部分一致性以获得更高的可用性

    3.2K10

    数据库不使用外键的 9 个理由

    我的经验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。 为什么这是一个问题? 1....表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...全表重新加载 一些数据库,如数据仓库,分段或接口数据库,需要经常从外部重新加载数据。这会导致重新加载时数据不一致(在父表为空的情况下,子表可能已满载)。这可以通过在重新加载时禁用外键来绕过。...这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。 5.

    1.2K10

    使用 Python 从字典键中删除空格

    在本文中,我们将了解字典功能以及如何使用 python 删除键之间的空格。此功能主要用于根据需要存储和检索数据,但有时字典的键值之间可能存在空格。...因此,在本文中,我们将了解如何使用python从字典键中删除空格的不同方法? 建立新词典 删除空格的最简单方法之一是简单地创建一个全新的字典。...编辑现有词典 在这种从键中删除空格的方法下,我们不会像第一种方法那样在删除空格后创建任何新字典,而是从现有字典中删除键之间的空格。...使用字典理解 此方法与上述其他两种方法不同。在这种方法中,我们从字典理解创建一个新字典。键的值保持不变,但所做的唯一更改是在将数据从字典理解传输到新字典时,rxemove中键之间的空格。...使用递归函数 这种类型的方法最适合当一个字典存在于另一个字典(嵌套字典)中的情况。在这种情况下,我们可以使用递归函数来删除键之间的空格。

    30440

    数据库不推荐使用外键的9个理由

    来源:www.jdon.com/49188 我的经验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。 为什么这是一个问题?...2.表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...3.全表重新加载 一些数据库,如数据仓库,分段或接口数据库,需要经常从外部重新加载数据。这会导致重新加载时数据不一致(在父表为空的情况下,子表可能已满载)。这可以通过在重新加载时禁用外键来绕过。...这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。

    2.1K10

    数据库不推荐使用外键的 9 个理由

    2.表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...3.全表重新加载 一些数据库,如数据仓库,分段或接口数据库,需要经常从外部重新加载数据。这会导致重新加载时数据不一致(在父表为空的情况下,子表可能已满载)。这可以通过在重新加载时禁用外键来绕过。...通常,成本大于收益,开发人员不用担心外键。 4.更高层次的框架 一些应用程序使用编程框架,在物理数据库之上创建另一个逻辑层。...这些工具负责参照完整性,并与RDBMS一起创建更高级别的数据库引擎。这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。

    1.7K30

    项目中设计数据库是否要使用外键?

    一、问题引入 学过数据库的同学都知道外键,外键能够保证数据的一致性。...以往做项目的时候,外键是肯定得用的,不用外键是万万不可能的。 可是有一天偶然看到书上说不建议使用外键,神马(O_o)??还有这样的操作?那该怎么去保证数据一致性啊,不会产生很多脏数据吗?想想就头大。...; 缺点: (1)数据库需要维护外键的内部管理; (2)外键等于把数据的一致性事务实现,全部交给数据库服务器完成; (3)有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源...,需要自己在逻辑层自己实现; (2)会出现数据错误覆写,错误数据进库的情况; (3)消耗了服务器的性能; (4)业务层里夹带持久层特性,耦合; 不使用外键,就得自己在逻辑层保证数据一致性,所以就得把情况考虑清楚...互联网行业:不推荐使用外键 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,且不能轻易地水平扩展; 若是把数据一致性的控制放到事务中,即让应用服务器承担此部分的压力; 应用服务器一般都是可以做到轻松地水平的伸缩

    95540

    如何使用 Python 和 SQLAlchemy 结合外键映射来获取其他表中的数据

    在使用 Python 和 SQLAlchemy 时,结合外键映射可以让你在查询时轻松地获取其他表中的数据。...SQLAlchemy 提供了丰富的 ORM(对象关系映射)功能,可以让你通过定义外键关系来查询并获取关联的数据。下面我会演示如何设置外键关系,并通过 SQLAlchemy 查询获取其他表中的数据。...2.3 添加另一个外键如果我们需要在 Order 表中添加另一个外键,例如 product_id 字段,并且希望获取该订单所属产品的信息,那么我们可以在 Order 类中定义一个新的关系属性,使用 relationship...总结结合外键映射,你可以通过 SQLAlchemy 轻松地获取不同表之间关联的数据。你可以使用:relationship:设置表之间的关系(如外键),并通过 ORM 获取关联的数据。...联接查询 (joinedload):通过联接查询加载关联数据,提高查询效率。直接访问外键列:直接访问与外键相关的表格数据。

    14310

    删除数据库中未指定名称的外键的存储过程

    数据库中的某个表A,因为业务原因被移到别的库。麻烦的是,有几张子表(B, C, D等)建有指向它的外键,而且在创建时没有指定统一的外键名。...如此一来,在不同的环境(开发、测试、生产等)中该外键的名称不一样,必须逐个去查询外键名再进行删除,十分不便。...为此,特地编写了一个存储过程,只须指定子表名(B,C,D)和外键的列名,直接调用该存储过程即可。...Oracle的存储过程代码如下: -- 删除指定表、指定列上的外键(系统命名或未知名) CREATE OR REPLACE PROCEDURE DROP_FK(P_TABLE IN VARCHAR2,...END; $$ LANGUAGE plpgsql; MySQL的代码如下: DELIMITER // DROP PROCEDURE IF EXISTS drop_fk// -- 删除指定表、指定列上的外键

    1.3K10

    一文一点 | 为什么不建议使用数据库外键

    有的SQL规约是这么说的: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。...那先复习下是什么外键,举一个最熟悉的例子: 学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。...那么外键为什么有性能问题呢 1、数据库需要额外的维护外键自身的内部管理; 2、外键相当于把数据的一致性事务的实现,全部交给了数据库服务器来完成; 3、有了外键以后,当做一些涉及到外键字段的增,删,改操作时...,需要触发相关操作去检查,而不得不消耗资源; 4、每次更新数据,都需要额外的检查另外一张表的数据,容易造成死锁; 总结: 1、互联网行业场景中不推荐使用外键,用户量大,并发度高,如果使用外键,数据库服务器很容易产生性能瓶颈...2、传统行业可以使用,强调数据强一致性,而且用户数量有限,可控。 基于此,互联网场景中都是不建议使用外键的,外键与级联更新适用于单机低并发,不适合分布式、高并发集群。

    1.3K20

    Django中基表的创建、外键字段属性简介、脏数据概念、子序列化

    如两张表建立了一对一外键字段,外键在A表,那么先往B表写数据就更合理。...例子:部门没有了,部门员工里的部门字段改为未分组部门的id SET_NULL使用的时候需要NULL=True;假设A表依赖B表,B记录删除,A表的外键字段重置为NULL,所以必须配合NULL=True使用...b.事物A按一定的条件从数据库中读取了某些数据后,事物B删除了其中部分记录,当A再次以相同条件读取时,发现某些记录消失了。 3.脏读:一个事物读取了另一个事物未提交的数据。...a.事物A按一定的条件从数据库中读取某些数据记录后,事物B插入了一些记录,当B再次按照相同条件读取数据时,发现多了一些记录。(也叫做幻影读)。...子序列化的使用方法及注意事项: 1)只能在序列化中使用 2)字段名必须是外键(正向反向都可以)字段,相对于自定义序列化外键字段,自定义序列化字段不能参与反序列化,而子序列化必须为外键名,子序列化字段不写入数据库

    4.3K30

    ElasticSearch 使用 Logstash 从 MySQL 中同步数据

    目的是希望将现有的数据导入到 ElasticSearch 中,研究了好几种,除了写代码的方式,最简便的就是使用 Logstash 来导入数据到 ElasticSearch 中了。...因为现有的数据在 MySQL 数据库中,所以希望采用 logstash-input-jdbc 插件来导入数据。...在线安装网络问题 建议大家在使用 Logstash 的时候使用最新版本,如果必须用老版本在先安装 logstash-input-jdbc 插件。 本节从网上摘录了一段配置,没有经过充分验证。...lowercase_column_names => true #Whether to save state or not in last_run_metadata_path #保存上次运行记录,增量提取数据时使用...=> "%{id}" } } #------------------------------------end------------------------------------ 使用时请去掉此文件中的注释

    3.6K42

    如何使用DNS和SQLi从数据库中获取数据样本

    泄露数据的方法有许多,但你是否知道可以使用DNS和SQLi从数据库中获取数据样本?本文我将为大家介绍一些利用SQL盲注从DB服务器枚举和泄露数据的技术。...我尝试使用SQLmap进行一些额外的枚举和泄露,但由于SQLmap header的原因WAF阻止了我的请求。我需要另一种方法来验证SQLi并显示可以从服务器恢复数据。 ?...此外,在上篇文章中我还引用了GracefulSecurity的文章内容,而在本文中它也将再次派上用场。 即使有出站过滤,xp_dirtree仍可用于从网络中泄露数据。...在下面的示例中,红框中的查询语句将会为我们从Northwind数据库中返回表名。 ? 在该查询中你应该已经注意到了有2个SELECT语句。...此查询的结果是我们检索Northwind数据库中第10个表的名称。你是不是感到有些疑惑?让我们来分解下。 以下内部的SELECT语句,它将返回10个结果并按升序字母顺序排序。 ?

    11.5K10

    在 .NET 中优化 API 性能:使用分页、筛选和投影实现高效的数据检索

    这种方法可确保我们的应用程序使用更少的内存并更快地执行。 在本文中,我将向您展示如何在 .NET 中实现高效的查询系统。...介绍 在本文中,我将展示如何使用以下关键工具和技术在 .NET 中优化 API 性能: LINQ Dynamic Core,用于根据用户输入进行动态排序和筛选。...这些工具有助于确保高效的数据检索,减少内存使用并提高性能,即使对于大型数据集也是如此。 问题 获取大型数据集的所有数据可能会占用内存并降低系统速度。...这些方法从 HTTP 请求查询中检索分页和排序参数:HttpContextAccessorExtensionsIHttpContextAccessor GetPageableParams:提取分页参数(...通过使用 ,我们可以从延迟执行中受益,这意味着仅在需要时运行查询。此外,通过使用 ,我们可以只将必要的条件发送到查询,从而减少数据库的工作量。

    10910

    使用生成式对抗网络从随机噪声中创建数据

    可以用来在数据有限的情况下产生新数据的GAN可以证明是非常有用的。数据有时可能比较困难,而且费时费钱。然而,为了有用,新的数据必须足够现实,以便我们从生成的数据中获得的任何见解仍然适用于真实的数据。...在我的实验中,我尝试使用这个数据集来看看我能否得到一个GAN来创建足够真实的数据来帮助我们检测欺诈案例。这个数据集突出显示了有限的数据问题:在285,000个交易中,只有492个是欺诈。...您可以从Ian Goodfellow关于此主题的博客中了解有关GAN的更多信息。 ? 使用GAN时遇到许多挑战。...从我们的测试看来,我们最好的体系结构是在训练步骤4800时的WCGAN,在那里它达到了70%的xgboost准确度(记住,理想情况下,精确度是50%)。所以我们将使用这种架构来生成新的欺诈数据。...xgboost分类器能够保留100个真实案例中用于识别欺诈的所有信息,即使从数十万个正常案例中挑选出来,也不会被其他生成的数据所迷惑。未经训练的WCGAN产生的数据不会有帮助,也不会令人惊讶。

    3K20
    领券