我有一组模型。你知道吗
class Asset(db.Model):
__tablename__ = 'assets'
asset_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
asset_type_id = db.Column(db.ForeignKey('asset_types.asset_type_id'))
...
__mapper_args__ = {
'polymorphic_on': asset_type_id
}
class Vehicle(Asset):
__tablename__ = 'vehicles'
asset_id = db.Column(db.ForeignKey('assets.asset_id'), primary_key=True)
...
...
__mapper_args__ = {
'polymorphic_identity':2
}
我想将Vehicle
混入一个具有自引用方法的类中。像这样:
from library.models import Vehicle as EsdbVehicle
class Vehicle(EsdbVehicle):
def update_usage(self, db_session, odometer):
self.odometer = odometer
db_session.commit()
当我查询EsdbVehicle
模型vehicles = db_session.query(EsdbVehicle).all()
时,我得到了115个结果,它们与我的数据库相匹配。但是,当我查询实现工具时,得到0个结果。我错过了什么?你知道吗
如果不建立DB连接并运行代码,我无法100%确定这一点,但我的直觉告诉我,这并没有按预期工作,因为在SQLAlchemy看来,您似乎在尝试执行表继承(但由于您没有这样做,而且类定义不完整,SQLAlchemy很困惑),而您真正想要的是混入。你知道吗
我会尝试更像这样的方法:
应该起作用的原因是,每次扩展ORM映射类时,实际上是在告诉SQLAlchemy您希望执行某种表继承。在这种情况下,您可以不添加类型(对于STI),因为您没有添加属性(列),而只是添加了功能。你知道吗
如果这不工作(或是不完整的),只要添加一个评论,我会调整。你知道吗
编辑:另一个想法。另一种方法是跳过继承,只编写对
Vehicle
类进行操作的函数。它们不一定是方法。我经常这样做是为了避免实际的SQL模型和类/方法结构之间的额外耦合。你知道吗你使用ORM的次数越多,你就越开始意识到经常使用更少他们的特性会更好。你知道吗
相关问题 更多 >
编程相关推荐