То, что вы пытаетесь сделать, - это сохранить большую часть информации на вашем объекте Device, а затем дифференцировать ее, связав ее с записью в отдельных таблицах, называемых Hub и Controller.Например, если у вас есть 2 контроллера и один концентратор:
===============================================
Table: "device"
id name status room_id type
===============================================
1 Hub A True 1 Hub
2 Troller A True 1 Troll
3 Troller B False 8 Troll
===============================================
============
Table: "hub"
id
============
1
============
===================
Table: "controller"
id
===================
2
3
===================
Хотя подобное может иметь смысл в других случаях, оно не использует преимущества используемой вами реляционной базы данных.Вместо этого я бы предложил одну таблицу для всех ваших устройств, а затем связал бы их со второй таблицей типов устройств:
class Device(Base):
__tablename__ = 'device'
id = Column(Integer, primary_key=True)
name = Column(String)
status = Column(Boolean)
room_id = Column(Integer, ForeignKey('room.id')
type_id = Column(Integer, ForeignKey('device_type.id')
type = relationship('DeviceType', backref='devices')
class DeviceType(Base):
__tablename__ = 'device_type'
id = Column(Integer, primary_key=True)
name = Column(String)
Не забудьте from sqlalchemy.orm import relationship
.Таким образом, вы можете выбрать тип, а затем использовать связь, чтобы получить все устройства этого типа.Вы также можете добавить новый тип устройства в будущем, не добавляя совершенно новую таблицу.
В этом случае те же самые таблицы сверху будут выглядеть так:
===============================================
Table: "device"
id name status room_id type_id
===============================================
1 Hub A True 1 1
2 Troller A True 1 2
3 Troller B False 8 3
===============================================
====================
Table: "device_type"
id name
====================
1 Hub
2 Controller
====================
Если вы хотите вернуть список всех контроллеров, просто запросите контроллер device_type
и используйте отношение / backref и получите все связанные устройства:
controller_type = session.query(DeviceType).get(2)
controllers = controller_type.devices