大量の特許データをMySQLデータベースに保存し、SQLAlchemyを介して相互作用しています。譲受人(特許を譲渡された会社)のリストを表すコレクションがPatentクラス内にあります。
assignees = relationship('Company', secondary=patent_company_table, backref='patents')
データベースに保存されているオブジェクトの一部を処理しています。特許オブジェクトの場合、担当者リストから一部の担当者(会社オブジェクト)p
を削除したいと思います。http://docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collectionsに基づくと、呼び出すと実際にCompanyオブジェクトが削除されるようです。別のPatentオブジェクトの譲受人リストに含まれている可能性があるため、実際にはCompanyオブジェクトを削除するのではなく、譲受人のリストから譲受人を削除したい(つまり、patent_company_tableの行を削除したい) 。a
p
s.delete(a)
a
a
p
a
他new_assignees
からの担当者のみを含む新しいリストを作成してみて、次のように呼び出しました。p
a
p.assignees = new_assignees
s.add(p)
残念ながら、これは実際にp
はダーティとしてマークされていないため、データベースには影響しないと思います。
Companyテーブルからオブジェクトを削除するのではなく、patent_company_tableの行を削除して、コレクションからオブジェクトを削除する方法について何か提案はありますか?
ありがとうございました。
アップデート
コードの抜粋は次のとおりです。
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)
すべての特許をループした後、にadded_patent_count = 983672
オブジェクトはありませんsession.dirty()
。またはを介して変更した後、セッションに手動で追加する必要がありますappend
かremove
?