У меня есть что-то вроде этого:
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
Полиморфизм SQLAlchemy преобразует объект из родительского объекта в дочерний объект ⇐ Python
Программы на Python
1732962307
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())
Подробнее здесь: [url]https://stackoverflow.com/questions/79239319/sqlalchemy-polymorphism-convert-object-from-parent-object-to-a-child-object[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия