SQLAlchemy与association_proxy的关系问题

2023-12-07

我一直在浏览许多网站,试图了解正在发生的事情,但我确实需要一些直接的帮助。如果我错过了文档中明显的内容,我很抱歉。

这就是我想要做的(我已经删除了除了基本代码之外的所有内容):

Base = declarative_base()

class User(Base):
    __tablename__ = 'user'
    login = Column(String(60), primary_key=True, nullable=False)

    groups = association_proxy('user_to_groups', 'group', creator=lambda group: UserToGroup(group_name=group.name))

    def __init__(self, login, groups=None):
        self.login = login
        if groups:
            for group in groups:
                self.groups.append(group)


class Group(Base):
    __tablename__ = 'group'
    name = Column(String(100), primary_key=True, nullable=False)
    description = Column(String(100), nullable=True)

    users = association_proxy('group_to_user', 'user', creator=lambda user: UserToGroup(user_login=user.login))

    def __eq__(self, other):
        return self.name == other.name


class UserToGroup(Base):
    __tablename__ = 'user_to_group'
    user_login = Column(String(60), ForeignKey(User.login), primary_key=true)
    group_name = Column(String(100), ForeignKey(Group.name), primary_key=true)

    user = relationship(User, backref='user_to_groups', cascade='all') #, cascade="all, delete"  #, delete-orphan ?
    group = relationship(Group, backref='group_to_user', cascade='all') #, cascade="all, delete"  #, delete-orphan ?


group1 = Group(name ="g:superadmin")
group2 = Group(name ="g:admin")
session.add_all([group1, group2])
session.flush()
user1 = User(login = "test", groups=[group1, group2])
session.add(user1)
session.flush()


user1 = session.query(User).filter(User.login=='test').one()
print(user1.user_to_groups)
print(type(user1.groups), dir(user1.groups))
user1.groups.remove(Group(name='g:admin'))

这是尝试运行后的响应回溯user1.groups.remove(Group(name='g:admin')):

AssertionError:依赖关系规则尝试清空实例“”上的主键列“user_to_group.user_login”

我想要它做的只是删除行user_to_group表并相应地更新对象以反映更改。

当关系表未映射到对象时,我之前就可以使用它,但我需要将它映射到一个对象以使用继承


级联从拥有的父对象到被删除的子对象,因此 User.user_to_groups,Group.group_to_user:

class UserToGroup(Base):
    __tablename__ = 'user_to_group'
    user_login = Column(String(60), ForeignKey(User.login), primary_key=True)
    group_name = Column(String(100), ForeignKey(Group.name), primary_key=True)

    user = relationship(User, backref=backref('user_to_groups', cascade='all, delete-orphan'))
    group = relationship(Group, backref=backref('group_to_user', cascade='all, delete-orphan'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLAlchemy与association_proxy的关系问题 的相关文章

随机推荐

  • 使用用户输入创建新对象 [JAVA]

    您好 我正在尝试创建一个程序 每当用户输入某个对象的新信息时就创建一个新对象 目前我有这个 import java util Scanner public class Main public static void main String
  • 无法销毁使用 Core Data 和 SQLite 创建的持久存储

    我有一个 iOS 应用程序 我想在每次启动时都从一个新的核心数据数据库开始 存储类型是 SQLite 但是 当我调用 persistenceStoreCoordinator destroyPersistentStore 时 100 都会收到
  • 通过 preg_replace 使用文本中的电话号码

    我可以使用 preg replace 在文本中查找电话号码 text preg replace d s 8 25 0 9 d strong 1 strong text 但是 我正在开发一个小功能 其中电话号码将被混淆 因此我需要实际的电话号
  • 是否有适用于 iphone sdk 的谷歌日历 api?

    有没有适用于 iphone sdk 的谷歌日历 api 目前我开发了一个 iphone 日历本机应用程序 在此应用程序中 我想从两侧与谷歌日历同步 所以我想知道是否有任何谷歌日历 API 可以完成这项工作 I found iphone gc
  • 上下文菜单的 SwiftUI 自定义视图

    我想在视图上长按手势时实现相同的自定义弹出视图 如照片 来自 Tweeter 应用程序 所示 这样我就可以同时显示自定义视图和上下文菜单 您需要进行定制ContextMenu using UIContextMenu from UIKit s
  • 我的 getJSON 调用随机返回结果,而不是它们被调用的顺序

    我需要制作多个getJSON请求将数据写入 HTML 文件 此示例显示了 3 个请求 但我将以相同的格式添加最多 6 个请求 可能更多 我的问题是结果以随机顺序返回 而不是按调用顺序返回 我怀疑它们是按照请求完成的顺序返回的 我每次都必须以
  • SQL 中的空字符文字是什么?

    我想知道 a 的字面意思是什么空字符 例如 0 在 SQL 中 Note 不是 NULL 字段值 而是空字符 see link 我有一列混合了典型字符和空字符 我正在尝试用不同的值替换空字符 我本以为以下内容会起作用 但没有成功 selec
  • 如何在 Swift 中按长度反向/降序对字符串数组进行排序?

    我想根据长度按降序排列字符串集合 首先 我不确定是否应该使用集合或数组 因为集合是无序事物的集合 并且我不需要集合中的元素必须位于有序集合中 我遇到了sorted 方法和sorted by 方法 但无法弄清楚如何按长度降序排列 仅按字母顺序
  • 使 WPF 数据网格中的行不可聚焦

    我试图弄清楚如何使以下 WPF DataGrid 中的行不可聚焦 正如你所看到的 我尝试添加一个
  • Unity C#,如何从另一个脚本调用函数来启动动画?

    using UnityEngine using System Collections public class ClickToMoveScript MonoBehaviour public string Chopping Chopping
  • 加载图像时出现内存不足异常

    我使用以下代码将图像作为缩略图加载到 FlowLayoutPanel 控件 不幸的是我遇到了 OutOfMemory 异常 正如您已经猜测的那样 内存泄漏是在该行发现的 Pedit Image System Drawing Image Fr
  • 使用流畅的 nhibernate 自动映射 IDictionary

    我有一个简单的类 如下所示 public class Item some properties public virtual IDictionary
  • 在我的 flutter 应用程序中使用 Agora rtc 引擎时出现问题

    我在使用 agora rtc 引擎时遇到问题 每次启动项目时我都会收到此错误消息 https pastebin com DuniUQYd 我不知道问题是什么 因为错误消息对我来说不是很清楚 在代码中 我还发布了我正在使用的频道名称应用程序
  • 为什么 ostream_iterator 没有按预期工作?

    不用多说 就是下面的代码 include
  • Android 上的 OpenCV - 标头;没有该文件/目录

    所以我对使用 Android 的 JNI 很陌生 如果这是愚蠢的事情 请提前抱歉 我已经安装了 SDK 并在 Eclipse 中将其添加为项目的库 完成所有操作后 我尝试运行 ndk build 函数 但出现此错误 Compile thum
  • Java 套接字。服务器-客户端通信

    我正在尝试将带有 gui 的客户端与没有 gui 的服务器连接 连接正在完成 但我看不到这两个应用程序之间的任何消息 我应该在客户端中获取 SERVER HERE 在服务器中获取 CLIENT HERE 客户端连接代码 Override p
  • .NET Reactive Framework 的良好介绍[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 除了 Microsoft 文档之外 是否有关于 Microsoft Reactive Rx 框架的良好介绍和教程 另外 反应式使使用传统异步编码技术难以解决的编程问题变得更容易的一个
  • 自动为 Qt 配置套件

    SO 假设我对 QtCreator 中的新套件有许多设置 GCC 编译器 9 3 0 从源代码构建 因为我必须使用的发行版有一个非常旧的版本 以及环境设置 我已经成功地设置了一个用于编译和执行已编译二进制文件的环境 并制作了一个脚本以使其工
  • 如何在 devstack 中管理用户/密码?

    我已经安装了devstack到一个干净的 Ubuntu 机器 我可以访问 OpenStack 仪表板 http localhost auth login 但是 我不知道如何管理用户或我的初始凭据是什么 此信息保存在哪里 该信息保存在 Key
  • SQLAlchemy与association_proxy的关系问题

    我一直在浏览许多网站 试图了解正在发生的事情 但我确实需要一些直接的帮助 如果我错过了文档中明显的内容 我很抱歉 这就是我想要做的 我已经删除了除了基本代码之外的所有内容 Base declarative base class User B