SQLAlchemy: каскадное удаление и несортируемые первичные ключиPython

Программы на Python
Anonymous
SQLAlchemy: каскадное удаление и несортируемые первичные ключи

Сообщение Anonymous »

Моя модель данных настроена следующим образом:

Код: Выделить всё

class Source(Base):
id = sa.Column(sa.Text, primary_key=True)
hpx = sa.Column(ha.Point, index=True, nullable=False)

class Field(Base):

id = Column(Integer, primary_key=True, autoincrement=True)
tiles = relationship(lambda: FieldTile, order_by='FieldTile.id', cascade="all, delete, delete-orphan")

class FieldTile(Base):

id = Column(ForeignKey(Field.id, ondelete='CASCADE'), primary_key=True)
hpx = Column(Tile, primary_key=True, index=True)
Каждая строка в исходной таблице представляет точку в пространстве. Каждая строка в таблице Field представляет собой область в пространстве, а каждая строка в таблице FieldTile представляет плитку HEALPix с несколькими разрешениями, содержащуюся в соответствующем поле. Между Field и FieldTile существует сопоставление «один ко многим».
Я хотел бы иметь возможность удалять поля и связанные с ними FieldTiles из базы данных с помощью каскадного удаления:

Код: Выделить всё

previous_fields = db.query(Field).first()
db.delete(previous_fields)
db.commit()
Однако, когда я это делаю, я получаю сообщение об ошибке, что мои первичные ключи не поддаются сортировке (поскольку плитки HEALPix имеют тип диапазона):

Код: Выделить всё

sqlalchemy.exc.InvalidRequestError: Could not sort objects by primary key; primary key values must be sortable in Python (was: '

Подробнее здесь: [url]https://stackoverflow.com/questions/78695838/sqlalchemy-cascading-deletes-and-non-sortable-primary-keys[/url]

Вернуться в «Python»