を接合継承を使用して、次のSQLAlchemyのマッピングを考える:SQLAlchemyのメンバー継承速いバルク削除オブジェクト
from sqlalchemy import sa
class Location(Base):
id = Column(Integer, primary_key=True)
name = sa.Column(sa.String)
type_ = sa.column(sa.String)
__tablename__ = 'location'
__mapper_args__ = {
'polymorphic_identity': 'location',
'polymorphic_on': type_,
}
class Field(Location):
id = Column(Integer, primary_key=True)
size = sa.Column(sa.Float)
__tablename__ = 'field'
__mapper_args__ = {
'polymorphic_identity': 'field',
}
__table_args__ = (
sa.ForeignKeyConstraint(['id'], ['location.id']),
)
session.query(Field).filter(Field.size < 5).delete()
どこ塩基は、適切な宣言型ベースであり、セッションが適切なセッション・オブジェクトです。上記の実装により、親Locationオブジェクトが削除されずにフィールドオブジェクトが削除されます(ドキュメントが明確に説明しているので、query.delete()は継承をサポートしていません)。私はsession.delete(obj)
をORMを使ってチェインの上にあるオブジェクトを削除することで回避することができます。ただし、nデータベースでSQL削除ステートメントが実行されます(nは削除するオブジェクトの数です)。私は一度に10万の子オブジェクトのオーダーで削除するかもしれないケースがあるので、この操作は恐ろしく遅いです(私がではなく、を継承継承で使用することは不可能です。これを変更するには深く)。
SQLAlchemyの内のいずれかの構築物または私はタイプField
のオブジェクトを照会し、適切N SQLの文を削除せずに、同様Location
テーブル内の項目を削除し、クエリオブジェクトを渡すことができるようになる合理的な代替手段はありますか?
私は現在PostgreSQLを使用していますが、解決策をdb-agnosticにしたいと考えています。
編集:リクエストごとに環境に関するテーブルのメタデータと詳細情報が追加されました。
であるあなたが使用して、プライマリキーと外部キー定義されているものをDB記載してください。あなたはおそらくこれのためにCoreを使うことができます。 –