gpt4 book ai didi

python - 更新 SqlAlchemy 多对多关联表中的值

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:17 25 4
gpt4 key购买 nike

根据下表,我如何更新用户所在的组?我觉得我必须遗漏一些明显的东西,但到目前为止我还没有找到任何可以说明如何做到这一点的东西。

group_permission_table = Table('group_permission', metadata,
Column('group_name', Integer, ForeignKey('group.group_name', onupdate="CASCADE", ondelete="CASCADE")),
Column('permission_name', Integer, ForeignKey('permission.permission_name', onupdate="CASCADE", ondelete="CASCADE"))
)

user_group_table = Table('user_group', metadata,
Column('user_name', Integer, ForeignKey('user.user_name', onupdate="CASCADE", ondelete="CASCADE")),
Column('group', Integer, ForeignKey('group.group_name', onupdate="CASCADE", ondelete="CASCADE"))
)

class Group(Base):
"""An ultra-simple group definition.
"""
__tablename__ = 'group'

group_name = Column("group_name", Text(), primary_key=True)

users = relationship('User', secondary=user_group_table, backref='groups')

class User(Base):
"""Reasonably basic User definition. Probably would want additional
attributes.
"""
__tablename__ = 'user'

user_name = Column("user_name", Text(), primary_key=True)
_password = Column('password', Text)
email = Column('email', Text())

有人吗?这必须是一个相当普遍的问题。你如何更新关联表中的内容?如果我无法更新其中的项目,我该如何删除其中的一行?

最佳答案

您不需要明确地从 M2N 关系表中删除任何内容。当您从 group.users 中删除用户然后提交 您的更改时,关系表中的数据将被更新(相应地插入或删除)。您可以通过使用 echo=True

记录 SQL 语句来检查这一点
engine = create_engine(..., echo=True)

删除的工作方式如下:

...
my_user = session.query(User).get(USR_ID)
my_group = session.query(User).get(GRP_ID)
my_group.users.append(my_user)
session.commit() # SA will insert a relationship row
my_group.users.remove(my_user)
session.commit() # SA will delete a relationship row

关于python - 更新 SqlAlchemy 多对多关联表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083696/

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