gpt4 book ai didi

python - SQLAlchemy 中的物化键

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:35 27 4
gpt4 key购买 nike

通常当你有一个带有自引用的表时,比如在树中,你有一个属性作为外键,它指向表的主键。 (就像文档中的 Adjacency List Relationships 示例一样)

但是,我有一个自然键,它是这样工作的:""为根

  • “a”、“b”、“c”等是“”的 child
  • “aa”、“ab”、“ac”等是“a”的 child
  • “ba”、“bb”、“bc”等是“b”的 child
  • “aaa”、“aab”、“aac”等是“aa”的 child

所以树中每一层都有一个字符,每个节点的子节点都是首字母相同且加了一个字符的子节点。这称为“物化 key ”

在不添加额外属性来引用父级的情况下,如何使用 SQLAlchemy 映射器执行此操作?

注意:我只对读取关系感兴趣,如果像 node.children.append(child) 这样的东西不起作用也没关系。此外,我坚持使用 0.4.8 版,但是如果这在这个版本中是不可能的,但只能在较新的版本中实现,我可能会努力更新。

编辑我在 SA mailinglist 上得到了第一个答案.它有效,但它不像我希望的那样基于映射器(例如使用 eagerload)

最佳答案

我确实理解问题的局限性,但您为什么要避免使用额外的 key ?当然,这是冗余信息,但取决于您的数据(行数、键的平均长度),拥有额外的键实际上可能会提高您在 SELECT 上的性能,并且您可以使用 eager -以最简单的方式加载 SA 中的关系。

例如,您可以执行以下操作:

  • 添加另一个数字标识符作为 PK,并在此链接 child / parent 。
  • 添加另一个字符串标识符以指向父对象(Key:Varchar,ParentKey:Varchar)。在某些 RDBMS(如 MSSQL)中,您可以有一个 PERSISTENT COMPUTED 列,这样您的客户端甚至不必提供父键,它将使用公式从 KEY 列自动计算(剪切最后一个字符)。在这种情况下,您在此列上有一个数据库索引和非常快速的关系检索。

关于python - SQLAlchemy 中的物化键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5471687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com