Полиморфизм SQLAlchemy преобразует объект из родительского объекта в дочерний объектPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Полиморфизм SQLAlchemy преобразует объект из родительского объекта в дочерний объект

Сообщение Anonymous »

У меня есть что-то вроде этого:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey

Base = declarative_base()

engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)

class Room(Base):
__tablename__ = 'rooms'
id = Column(Integer, primary_key=True)
floor = Column(Integer)
usage = Column(String(50))
__mapper_args__ = {'polymorphic_on': usage,
'polymorphic_identity': 'empty'}

def __repr__(self):
return f""

class Office(Room):
__tablename__ = 'offices'
id = Column(Integer, ForeignKey('rooms.id'), primary_key=True)
computers = Column(Integer)
desks = Column(Integer)
__mapper_args__ = {'polymorphic_identity': 'office'}

def __repr__(self):
return f""

class Bath(Room):
__tablename__ = 'baths'
id = Column(Integer, ForeignKey('rooms.id'), primary_key=True)
toilets = Column(Integer)
sinks = Column(Integer)
__mapper_args__ = {'polymorphic_identity': 'bath'}

def __repr__(self):
return f""

# Create tables
Base.metadata.create_all(engine)

# Create a new session
session = Session()

# Add initial Room instances
room_1 = Room(id=1, floor=1, usage='empty')
room_2 = Room(id=2, floor=1, usage='empty')
session.add_all([room_1, room_2])
session.commit()

print("Initial Rooms:", session.query(Room).all())

и я хочу преобразовать комнату в офис таким образом, чтобы, когда я запрашиваю таблицу комнат, она по-прежнему отображала комнату с атрибутом использования как офис, и когда я запрашиваю офис стол, он просто дает мне офис
Я попробовал это, и это сработало, но хочу знать, есть ли способ добиться этого, не удаляя исходную комнату
# Convert room_1 to an Office
session.delete(room_1) # Delete the initial Room instance
session.commit()

# Add Office instance with the same ID as room_1
office_1 = Office(id=1, floor=1, computers=10, desks=5)
session.add(office_1)
session.commit()

# Query and check results
print("Rooms after conversion:", session.query(Room).all())
print("Offices:", session.query(Office).all())



Подробнее здесь: https://stackoverflow.com/questions/792 ... ild-object
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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