Il giorno mercoledì 5 giugno 2019 18:17:48 UTC+2, Mike Bayer ha scritto: > > > > On Wed, Jun 5, 2019, at 12:02 PM, Christian Barra wrote: > > Hi, I am trying to understand what the best approach is to have lazy > attributes defined on a mixin and then used them on the subclasses. > > Ideally I'd would like to defer the load of that attribute (controller) > and use `undefer` when I know that that attribute is needed, to execute > only one query. > > Below there's the code I am trying to use, `recipe_set` is a backref, same > for `unit`, Controller is another model. > > > class BaseRecipeMixin(APIResourceMixin): > _key = None > > @declared_attr > def recipe_set_id(self): > return db.Column(db.ForeignKey('recipe_set.id'), unique=True, > nullable=False) > > @property > def controller(self): > return column_property( > Controller.query.filter( > Controller.unit == self.recipe_set.unit, > Controller.is_master.is_(True), > Controller.is_deleted.is_(False), > ).one_or_none(), > deferred=True, > ) > > > class EcRecipe(DosingRecipeMixin, BaseRecipeMixin, UpdateMixin, db.Model): > id = db.Column(db.Integer, primary_key=True) > pump_time = db.Column(db.Float, nullable=False, default=8) > > > But when I try to run this > > > > when you declare mapped attributes on a mixin you have to use > @declared_attr: > > > https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html#mixing-in-deferred-column-property-and-other-mapperproperty-classes > > The column_property() object needs to be made part of the mapping and > declarative uses this decorator to know it has to do that. > > > Thanks Mike, I'll try to use @declared_attr and go through the link.
-- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/a022c3d9-6d5d-4954-8b6d-9f947c4544d4%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.