Excluindo um objeto da coleção no SQLAlchemy
Eu estou armazenando um monte de dados de patentes em um banco de dados MySQL e interagindo com ele via SQLAlchemy. Eu tenho uma coleção dentro da classe Patent que representa a lista de cessionários (as empresas que receberam a patente):
<code>assignees = relationship('Company', secondary=patent_company_table, backref='patents') </code>
Estou processando alguns dos objetos armazenados no banco de dados e para um objeto de patentep
, Quero excluir algum destinatárioa
(um objeto da empresa) dep
lista de cessionários. Baseado fora dehttp://docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collections , parece que chamars.delete(a)
irá realmente excluir o objeto da empresaa
. Eu simplesmente quero remover o cessionárioa
da lista de cessionários parap
(isto é, remover uma linha na patent_company_table), NÃO realmente excluir o objeto Company, porquea
pode estar na lista de destinatários de outro objeto de patente.
Eu tentei criar uma nova listanew_assignees
que inclui apenas os cessionários dep
além dea
e depois chamado:
<code>p.assignees = new_assignees s.add(p) </code>
Isso infelizmente não marcap
tão sujo, então eu suponho que não afetaria o banco de dados.
Você tem alguma sugestão sobre como remover um objeto da coleção, excluindo a linha na patent_company_table ao invés de excluir o objeto da tabela Company?
Obrigado.
ATUALIZARAqui está um trecho do código:
<code>assignees = patent.assignees for assignee in assignees: if assignee in duplicate_company_to_default: patent.assignees.remove(assignee) default_company = duplicate_company_to_default[assignee] if default_company not in assignees: added_patent_count += 1 patent.assignees.append(default_company) </code>
Depois de percorrer todas as patentes,added_patent_count = 983672
mas não há objetos emsession.dirty()
. Preciso adicionar manualmente à sessão depois de modificar viaappend
ouremove
?