在一张表上创建多对多

2023-11-26

Flask-SQLAlchemy 给出了example如何创建多对多关系。它是在两个不同的表之间完成的。

是否可以在同一个表上创建多对多关系?例如,一个姐妹可以有很多姐妹,而她也可以有很多姐妹。我努力了:

girl_sister_map = db.Table('girl_sister_map',
                      db.Column('girl_id', 
                                db.Integer, 
                                db.ForeignKey('girl.id')),
                      db.Column('sister_id', 
                                db.Integer, 
                                db.ForeignKey('girl.id')))

class Girl(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    sisters = db.relationship('Girl',
                              secondary=girl_sister_map,
                              backref=db.backref('othersisters', lazy='dynamic'))

但是当我尝试为女孩添加姐妹时,我得到:

sqlalchemy.exc.AmbigouslyForeignKeysError:无法确定关系 Girl.sisters 上的父/子表之间的联接条件 - 有多个外键路径通过辅助表“girl_sister_map”链接表。指定“foreign_keys”参数,提供应被视为包含从辅助表到每个父表和子表的外键引用的列的列表。

这可能吗?我应该怎样做呢?


你正试图建立一个所谓的邻接表。也就是说,您有一个自身带有外键的表。

在您的具体情况下,它是自引用多对多关系.

SQLAlchemy 中支持这一点,您将通过前面的链接发现这一点。该文档包含几个示例。

基本上,您将需要primaryjoin and secondaryjoin确定您希望如何加入表的参数。直接来自文档:

Base = declarative_base()

node_to_node = Table("node_to_node", Base.metadata,
    Column("left_node_id", Integer, ForeignKey("node.id"), primary_key=True),
    Column("right_node_id", Integer, ForeignKey("node.id"), primary_key=True)
)

class Node(Base):
    __tablename__ = 'node'
    id = Column(Integer, primary_key=True)
    label = Column(String)
    right_nodes = relationship("Node",
                        secondary=node_to_node,
                        primaryjoin=id==node_to_node.c.left_node_id,
                        secondaryjoin=id==node_to_node.c.right_node_id,
                        backref="left_nodes"
    )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在一张表上创建多对多 的相关文章

  • Pygame读取MIDI输入

    我参考了Pygame MIDI 文档 https www pygame org docs ref midi html and 这段代码 https stackoverflow com questions 62983509 pygame mi
  • Python 中的六边形自组织映射

    我在寻找六边形 自组织映射 http en wikipedia org wiki Self organizing map在Python上 准备好模块 如果存在的话 绘制六边形单元格的方法 将六边形单元作为数组或其他方式使用的算法 About
  • 类属性在功能上依赖于其他类属性

    我正在尝试使用静态类属性来定义另一个静态类属性 我认为可以通过以下代码来实现 f lambda s s 1 class A foo foo bar f A foo 然而 这导致NameError name A is not defined
  • 行为:如何从另一个文件导入步骤?

    我刚刚开始使用behave http pythonhosted org behave 一个Pythonic BDD框架 使用小黄瓜语法 http docs behat org guides 1 gherkin html 行为需要一个特征 例
  • 使用 genfromtxt 导入 numpy 中缺失值的 csv 数据

    我有一个 csv 文件 看起来像这样 实际文件有更多的列和行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 假设文件的名称是info csv如果我尝试使用导入它 data numpy genfromtxt i
  • 使用Python将图像转换为十六进制格式

    我的下面有一个jpg文件tmp folder upload path tmp resized test jpg 我一直在使用下面的代码 Method 1 with open upload path rb as image file enco
  • Python 中的这种赋值方式叫什么? a = b = 真

    我知道关于元组拆包 http docs python org tutorial datastructures html tuples and sequences但是当一行中有多个等号时 这个赋值被称为什么 阿拉a b True 它总是让我有
  • Python While 循环,and (&) 运算符不起作用

    我正在努力寻找最大公因数 我写了一个糟糕的 运算密集型 算法 它将较低的值减一 使用 检查它是否均匀地划分了分子和分母 如果是 则退出程序 但是 我的 while 循环没有使用 and 运算符 因此一旦分子可整除 它就会停止 即使它不是正确
  • 在wxpython中使用wx.TextCtrl并在按钮单击后显示数据的简单示例 - wx新手

    我正在学习 python 并尝试使用 wxpython 进行 UI 开发 也没有 UI exp 我已经能够创建一个带有面板 按钮和文本输入框的框架 我希望能够在文本框中输入文本 并让程序在单击按钮后对输入框中的文本执行操作 我可以获得一些关
  • 字典的嵌套列表

    我正在尝试创建dict通过嵌套list groups Group1 A B Group2 C D L y x 0 for y in x if y x 0 for x in groups d k v for d in L for k v in
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • FastText - 由于 C++ 扩展未能分配内存,无法加载 model.bin

    我正在尝试使用 FastText Python APIhttps pypi python org pypi fasttext https pypi python org pypi fasttext虽然 据我所知 此 API 无法加载较新的
  • python中的sys.stdin.fileno()是什么

    如果这是非常基本的或之前已经问过的 我很抱歉 我用谷歌搜索但找不到简单且令人满意的解释 我想知道什么sys stdin fileno is 我在代码中看到了它 但不明白它的作用 这是实际的代码块 fileno sys stdin filen
  • Python 矩阵每一行的总和

    lista 1 2 3 4 5 6 7 8 9 print lista def filas lista res for elemento in lista x sum lista elemento res append x print re
  • WindowsError:[错误 5] 访问被拒绝

    我一直在尝试终止一个进程 但我的所有选项都给出了 Windows 访问被拒绝错误 我通过以下方式打开进程 一个python脚本 test subprocess Popen sys executable testsc py 我想杀死那个进程
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • Plotly:如何避免巨大的 html 文件大小

    我有一个 3D 装箱模型 它使用绘图来绘制输出图 我注意到 绘制了 600 个项目 生成 html 文件需要很长时间 文件大小为 89M 这太疯狂了 我怀疑可能存在一些巨大的重复 或者是由单个项目的 add trace 方法引起的 阴谋 为
  • Python模块单元测试的最佳文件结构组织?

    遗憾的是 我发现有太多方法可以在 Python 中保存单元测试 而且它们通常没有很好的文档记录 我正在寻找一种 终极 结构 它可以满足以下大部分要求 be discoverable by test frameworks including
  • CSV 在列中查找最大值并附加新数据

    大约两个小时前 我问了一个关于从网站读取和写入数据的问题 从那时起 我花了最后两个小时试图找到一种方法来从输出的 A 列读取最大日期值 将该值与刷新的网站数据进行比较 并将任何新数据附加到 csv 文件而不覆盖旧的或创建重复项 目前 100
  • Pandas 在特定列将数据帧拆分为两个数据帧

    I have pandas我组成的 DataFrameconcat 一行由 96 个值组成 我想将 DataFrame 从值 72 中分离出来 这样 一行的前 72 个值存储在 Dataframe1 中 接下来的 24 个值存储在 Data

随机推荐

  • Go - HTML 注释未呈现

    我正在构建 Go Web 应用程序 我在渲染的 html 页面上发现了一些异常 我所有的 html 评论突然没有被渲染 我猜是因为我使用的go版本 刚刚更新到更高版本 因为在我更新之前它是好的 这是我的代码 ul class breadcr
  • Java 8、类型注释和 JSR 308

    我已经安装了最新的 JDK 8 b116 但我注意到我无法使用类型注释 例如 阅读 Java 教程 如果我写 String str null String myString NonNull String str or TEST st new
  • 如何在c#中检索字符串formData js

    我必须在 net 的 Web api 中检索 idPerson 的值 我已经检索到文件 UploadedImage 但我无法检索 idPerson 的值 有人有解决办法吗 Thx 我的js函数 Upload de l image de pr
  • 零长度位域的实际使用

    我对 C 不太确定 但 C 允许长度为 0 的未命名位字段 例如 struct X int 0 问题一 这个可以有什么实际用途you考虑到 问题二 您知道哪些实际用途 如果有 Edited 您使用零长度位字段作为一种黑客方法 让编译器布局一
  • UIWebView stringByEvaluatingJavaScriptFromString

    我一直致力于让一些非常基本的 JS 在我的 UIWebView 中运行 在网络视图的委托中 我有 void webViewDidFinishLoad UIWebView wView NSString someHTML wView strin
  • 删除子图

    我正在尝试找出一种删除 动态 matplotlib 中的子图的方法 我看到他们有一个remove方法 但我收到错误 NotImplementedError cannot remove artist 我很惊讶我在任何地方都找不到这个 有谁知道
  • 缩放和平移后如何获得相对于画布的触摸坐标?

    在移动和缩放画布后 我需要获得相对于画布的 x 和 y 触摸 以检查碰撞和类似的情况 每当我平移画布或围绕原点 0 0 缩放画布时 我已经设法通过使用以下代码获取触摸坐标 private float convertToCanvasCoord
  • 为什么 exec("break") 不在 while 循环内工作

    正如问题所问 为什么下面的代码不起作用 while True exec break 我通过 python 3 5 2 控制台在 pycharm 中执行上述内容 我最初认为这是一个上下文问题 但在阅读文档后 我还没有进一步理解为什么会出现此错
  • SQL 查询之间有什么区别?

    我们有这样的查询 SELECT t FROM articles t WHERE t article id 59446 也称为 SELECT articles FROM articles WHERE articles article id 5
  • 您的连接不安全 - 使用 Selenium.WebDriver v.3.6.0 + Firefox v.56

    我正在编写测试硒 C 我面临一个重要问题 因为当我使用安全连接测试我的网站时没有找到解决方案 HTTPS 我在 stackoverflow 上找到的所有解决方案都已过时或不起作用 我尝试练习以下问题的所有解决方案 Selenium 为什么将
  • 如何使用java获取本地系统的子网掩码?

    你如何获得Subnet使用Java的本地系统的掩码地址 本地主机接口的第一个地址的网络掩码 InetAddress localHost Inet4Address getLocalHost NetworkInterface networkIn
  • 如何从 QListWidget 中删除项目

    每次我需要从 QListWidget 列表中删除 Item 时 我都会陷入使用 myItem hide 方法的困境 隐藏项目而不是删除 移除会使事情变得不必要的复杂 如果您向我展示如何从 ListWidget 中永久删除项目 我将不胜感激
  • Matplotlib:Times New Roman 显得粗体

    由于某种原因 当我在我的应用程序中使用 Times New Roman 时mpl情节显得粗体 其他字体都OK 这是一个最小的示例和结果 在 Word 文档中 用于与我期望的 Times New Roman 的外观进行比较 import ma
  • 我无法理解这一行 - 取消引用私有成员变量的地址还是什么?

    我不久前问过一个问题关于访问STL适配器的底层容器 我得到了一个非常有帮助的答案 template
  • 无法从 TypeScript 中的文件加载类

    我有一堂课 看起来像这样 export module GameModule export class Game private boardContainer HTMLElement private board number construc
  • 如何获取在其声明中实际键入的变量名称? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中查找传递给函数的变量名 下面的类包含字段城市 我需要动态确定在类声明中键入的字段名称 即我需要从对象城市的实例中获取字符串 city 我尝试通过检查 DoSomething 中的 Type
  • 将 const 指针引用绑定到非常量指针

    int val2 38 int ptr val2 const int ptrRef ptr ERROR int i 92 int ref i i const int ref i2 ref i OK 为什么我不能有一个引用非常量指针的常量引用
  • Java XML处理实体问题?

    当我尝试运行 java 程序时出现以下错误 它应该读取 xml 文件并打印出一些内容 据我了解 有一个未引用的实体不属于 xml 标准的一部分 所以我的问题是 我该如何解决这个问题 Thanks Fatal Error subject xm
  • Java中n++ VS ++n的区别

    我的 Java 老师说最好使用 n 而不是 n 我没有看到这背后的逻辑 有人知道吗 n增加该值并返回新值 n 增加值并返回old one Thus n 需要额外的存储空间 因为它必须跟踪旧值 以便在增量后可以返回它 我预计这两者之间的实际差
  • 在一张表上创建多对多

    Flask SQLAlchemy 给出了example如何创建多对多关系 它是在两个不同的表之间完成的 是否可以在同一个表上创建多对多关系 例如 一个姐妹可以有很多姐妹 而她也可以有很多姐妹 我努力了 girl sister map db