Обновить значение в SqlAlchemy таблица сопоставления «многие ко многим» - PullRequest
1 голос
/ 22 февраля 2011

Учитывая приведенные ниже таблицы, как мне обновить, в какой группе находится пользователь?Я чувствую, что мне не хватает чего-то очевидного, но я пока не нашел ничего такого, что показывало бы, как это сделать.

    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())

Кто-нибудь?Это должно быть довольно распространенной проблемой.Как вы обновляете то, что находится в таблице ассоциации?Если я не могу обновить элемент там, как мне удалить строку там?

1 Ответ

4 голосов
/ 04 марта 2011

Вам не нужно ничего явно удалять из таблицы отношений M2N.Когда вы удаляете пользователя из group.users и затем commit ваших изменений, данные в таблице взаимосвязей будут обновляться (соответственно вставляться или удаляться).Вы можете проверить это, зарегистрировав операторы SQL с помощью echo=True

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...