我有一個加入繼承組模型。SQLAlchemy的密新預期映射的實體實施了
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個結果,這符合我的DB。但是,當我查詢實施車輛時,我得到0結果。我錯過了什麼?
看來,我不能混入一張表,只有列,基於文檔:http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/mixins.html 可悲的是我試圖重構一些不好的選擇,希望能夠聰明地使用mixin。看起來我可能必須以另一種方式做到這一點。我會將你的答案標記爲已接受。 – mam8cc
是的,這是正確的,列和功能混合是唯一能在SQLAlchemy理解繼承映射的範圍內工作的東西。很高興有幫助。如果你重構ORM代碼,通常可以寫一個全新的模型,然後在重構調用者之前遷移數據並使用接口快速修補新模型。原因是與ORM代碼,你基本上是一次重構兩件事情,架構和對象模型。 –