Mike,

Here's the solution I came up with. It shows the 'inverted select' used in
the comparator vs the hybrid expression

class ModelBase(db.Model):
    __abstract__ = True

    def __repr__(self):
        return "{} ({}:{})".format(type(self).__name__, self.name, self.id)


class HybridType(ModelBase):
    __tablename__ = 'hybrid_types'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text)


class HybridModel(ModelBase):
    __tablename__ = 'hybrids'

    id = db.Column(db.BigInteger, primary_key=True)
    name = db.Column(db.Text)
    hybrid_type_id = db.Column(db.Integer, db.ForeignKey('hybrid_types.id'),
nullable=False)
    hybrid_type = db.relationship('HybridType')

    def __init__(self, *args, **kwargs):
        self.hybrid_type_name = self.hybrid_type_identity
        return super().__init__(*args, **kwargs)

    @classproperty
    def hybrid_type_identity(cls):
        return inflection.underscore(cls.__name__)

    @declared_attr
    def __mapper_args__(cls):
        return dict(
            polymorphic_on=cls.hybrid_type_name_subquery(),
            polymorphic_identity=cls.hybrid_type_identity,
        )

    @hybrid_property
    def hybrid_type_name(self):
        return self.hybrid_type.name

    @hybrid_type_name.setter
    def hybrid_type_name(self, value):
        self.hybrid_type_id = (
            select([HybridType.id]).
            where(HybridType.name == value)
        )

    @hybrid_type_name.expression
    def hybrid_type_name(cls):
        return cls.hybrid_type_name_subquery()

    @classmethod
    def hybrid_type_name_subquery(cls):
        return select([HybridType.name]).where(HybridType.id ==
cls.hybrid_type_id).as_scalar()


    class HybridComparator(Comparator):

        def operate(self, op, other):
            return op(HybridType.hybrid_type_id,
select([HybridType.id]).where(HybridType.name == other).as_scalar())


    @hybrid_type_name.comparator
    def hybrid_type_name(cls):
        return cls.HybridComparator(cls)


class HybridAlpha(HybridModel):
    pass


class HybridBeta(HybridModel):
    pass


class TestHybrids:

    def test_all_query(self):
        db.session.add(HybridType(name=HybridAlpha.hybrid_type_identity))
        db.session.add(HybridType(name=HybridBeta.hybrid_type_identity))
        db.session.add(HybridAlpha(name='alpha_instance'))
        db.session.add(HybridBeta(name='beta_instance'))
        all_alphas = HybridAlpha.query.all()
        assert HybridModel.query.count() == 2
        assert HybridAlpha.query.count() == 1
        assert HybridBeta.query.count() == 1


On Wed, Dec 28, 2016 at 2:19 PM, mike bayer <mike...@zzzcomputing.com>
wrote:

>
>
> On 12/27/2016 04:36 PM, Tucker Beck wrote:
>
>> Mike (or whoever else might have insight):
>>
>> I used the pattern above, and it worked great until I tried use it for a
>> really large table that I was querying and filtering by the hybrid
>> property. Something like this:
>> query(HybridModel).filter_by(hybrid_type_name='alpha')
>>
>
> Well I mentioned a correlated subquery won't scale here.
>
>
>
>
>
>> The resulting query does a seq-scan applying a sub-select to get the
>> hybrid_type_name and then comparing it to the filter value ('alpha' in
>> the example). Obviously, this is sub-optimal, and I want the query to do
>> an index-scan comparing the hybrid_type_id matching the filter_value to
>> the hybrid_type_id of each row. The table has an index on
>> hybrid_type_id, so that query is orders of magnitude faster. Before
>> using this revised pattern we discussed, I got the query I wanted by
>> adding a comparator to my class that basically inverts the select used
>> by the hybrid property expression. That worked great before using this
>> pattern.
>>
>
> I'm not sure what "invert the select" looks like.
>
>
>> However, with the new pattern, the delcared_attr __mapper_args__
>> attempts to use the expression from the comaprator for polymorphic_on,
>> and that query results in an integer (primary key) which won't work
>> because we defined our polymorphic identities using the name
>>
>
> I'm not understanding this part either, can this be demonstrated with the
> simple test script I gave you ?
>
>
>
>
>
>> Do you have any ideas on how I might resolve this issue?
>>
>> On Sat, Dec 3, 2016 at 4:25 PM, mike bayer <mike...@zzzcomputing.com
>> <mailto:mike...@zzzcomputing.com>> wrote:
>>
>>
>>
>>     On 12/01/2016 05:29 PM, Tucker Beck wrote:
>>
>>         This is what I ended up with, and it *seems* to work pretty
>>         well. Does
>>         my approach here pass the sniff test?
>>
>>
>>     everything looks idiomatic, so if it does what you need, then it's
>>     greatg!
>>
>>
>>
>>
>>         from sqlalchemy.ext.hybrid import hybrid_property
>>         from sqlalchemy.ext.declarative import declarative_base,
>>         declared_attr
>>         from sqlalchemy.orm import sessionmaker, relationship,
>>         column_property
>>         from sqlalchemy import (
>>             Column, Integer, ForeignKey, Text,
>>             select, create_engine,
>>         )
>>
>>         Base = declarative_base()
>>
>>
>>         class HybridType(Base):
>>             __tablename__ = 'hybrid_types'
>>             id = Column(Integer, primary_key=True)
>>             name = Column(Text)
>>
>>
>>         class HybridModel(Base):
>>             __tablename__ = 'hybrids'
>>             hybrid_type_identity = 'base'
>>
>>             id = Column(Integer, primary_key=True)
>>             name = Column(Text)
>>             hybrid_type_id = Column(Integer, ForeignKey('hybrid_types.id
>>         <http://hybrid_types.id>
>>         <http://hybrid_types.id>'))
>>             hybrid_type = relationship('HybridType')
>>
>>             @declared_attr
>>             def __mapper_args__(cls):
>>                 return dict(
>>                     polymorphic_on=cls.hybrid_type_name,
>>                     polymorphic_identity=cls.hybrid_type_identity,
>>                 )
>>
>>             def __repr__(self):
>>                 return "{} ({}:{})".format(type(self).__name__,
>>         self.name <http://self.name>
>>         <http://self.name>, self.id <http://self.id> <http://self.id>)
>>
>>             def __init__(self, **kwargs):
>>                 self.hybrid_type_name = self.hybrid_type_identity
>>                 super(HybridModel, self).__init__(**kwargs)
>>
>>             @hybrid_property
>>             def hybrid_type_name(self):
>>                 return self.hybrid_type.name
>>         <http://self.hybrid_type.name> <http://self.hybrid_type.name>
>>
>>             @hybrid_type_name.expression
>>             def hybrid_type_name(cls):
>>                 return (
>>                     select([HybridType.name]).
>>                     where(HybridType.id == cls.hybrid_type_id).
>>                     as_scalar()
>>                 )
>>
>>             @hybrid_type_name.setter
>>             def hybrid_type_name(self, value):
>>                 self.hybrid_type_id = (
>>                     select([HybridType.id]).
>>                     where(HybridType.name == value)
>>                 )
>>
>>
>>         class HybridAlpha(HybridModel):
>>             hybrid_type_identity = 'alpha'
>>
>>
>>         class HybridBeta(HybridModel):
>>             hybrid_type_identity = 'beta'
>>
>>
>>         engine = create_engine('sqlite:///:memory:', echo=False)
>>         Base.metadata.create_all(engine)
>>         Session = sessionmaker(bind=engine)
>>         session = Session()
>>         session.add(HybridType(name='base'))
>>         session.add(HybridType(name='alpha'))
>>         session.add(HybridType(name='beta'))
>>         session.add(HybridModel(name='base_instance'))
>>         session.add(HybridAlpha(name='alpha_instance'))
>>         session.add(HybridBeta(name='beta_instance'))
>>         print(session.query(HybridModel).all())
>>         print(session.query(HybridAlpha).all())
>>         print(session.query(HybridAlpha).one().hybrid_type_name)
>>         session.query(HybridAlpha).one().hybrid_type_name = 'beta'
>>         print(session.query(HybridBeta).all())
>>
>>
>>         On Wed, Nov 30, 2016 at 7:20 AM, mike bayer
>>         <mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com>
>>         <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>>> wrote:
>>
>>
>>
>>             On 11/29/2016 07:31 PM, Tucker Beck wrote:
>>
>>                 Thanks for this! What allows the query to filter in the
>>         derived
>>                 classes
>>                 when using a column property instead of a hybrid
>>         property? Is it
>>                 declaring the __mapper_args__ in the base class
>> declaration
>>                 instead of
>>                 after it?
>>
>>
>>             Yea I don't think setting __mapper_args__ after the fact on
>> the
>>             class does anything.   Those __mapper_args__ are only for the
>>             mapper() constructor directly, which gets called when the
>>         class is
>>             declared.
>>
>>             you can set the actual polymorphic_on property right now
>>         only using
>>             the special class.__mapper__._set_polymorp
>> hic_on(<something>),
>>             that's one of a very few setters that's available on the
>> mapper
>>             after the fact and even then it's not fully public API right
>>         now.
>>
>>
>>
>>                 Also, it seems like having the hybrid_type_prop column
>>         property
>>                 obviates
>>                 the need for the hybrid property hybrid_type_name...that
>> is,
>>                 except for
>>                 the setter. Is there a way to give a column_property a
>>         setter?
>>
>>
>>             a column_property against a SQL expression is strictly a
>>         read-only
>>             thing, since "writing" to it makes no sense in terms of
>>         persistence.
>>
>>
>>             the column_property aspect here isn't strictly necessary,
>>         the mapper
>>             will create the property internally as a special case for the
>>             polymorphic_on setting if not provided.  the example can be
>>             re-organized w/ your hybrid in at least two ways:
>>
>>
>>             class HybridModel(Base):
>>                 # ...
>>
>>                 @declared_attr
>>                 def __mapper_args__(cls):
>>                     return {
>>                         "polymorphic_on": cls.hybrid_type_name
>>                     }
>>
>>
>>             or
>>
>>
>>             class HybridModel(Base):
>>                 # ...
>>
>>                 _hybrid_name_expr = (
>>                     select([HybridType.name]).
>>                     where(HybridType.id == hybrid_type_id).
>>                     as_scalar()
>>                 )
>>
>>                 __mapper_args__ = {
>>                     "polymorphic_on": _hybrid_name_expr
>>                 }
>>
>>                 # ...
>>
>>                 @hybrid_type_name.expression
>>                 def hybrid_type_name(cls):
>>                     return cls._hybrid_name_expr
>>
>>
>>
>>                 On Tue, Nov 29, 2016 at 2:59 PM, mike bayer
>>                 <mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>
>>         <mailto:mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com
>> >>
>>                 <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>
>>                 <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>>>> wrote:
>>
>>
>>
>>                     On 11/29/2016 05:01 PM, Tucker Beck wrote:
>>
>>                         The issue with using the foreign_key integer
>>         value as the
>>                         discriminator
>>                         is that you won't know what that is at class
>>         declaration
>>                 time. The
>>                         type_name, however, you can declare as a part of
>> the
>>                 class as
>>                         you would
>>                         with a normal string discriminator. I'm not sure
>>         how you
>>                 would do a
>>                         correlated subquery for the polymorphic_on
>>         attribute. I
>>                 modified the
>>                         query object so that I could filter results for
>>         the derived
>>                         classes. It
>>                         doesn't seem like that happens automatically.
>>         Maybe I'm
>>                 just not
>>                         doing
>>                         it right.
>>
>>
>>                     The correlated subquery will not scale as well as a
>>         direct
>>                     identifier, but here is an adaption of your test using
>>                     column_property(), and you should be able to set
>>                 polymorphic_on to
>>                     the select() object directly too.  There's another
>>         example
>>                 of this
>>                     at
>>
>>
>>         http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?hi
>> ghlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on
>>         <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?
>> highlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on>
>>
>>         <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?
>> highlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on
>>         <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?
>> highlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on>>
>>
>>
>>         <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?
>> highlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on
>>         <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?
>> highlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on>
>>
>>         <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?
>> highlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on
>>         <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?
>> highlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on>>>.
>>
>>                     For the "use the id" approach, you would need to
>>         query from
>>                     HybridType up front and populate the
>>         polymorphic_identity
>>                 attributes
>>                     after the fact, this is a feature that is not directly
>>                 supported yet
>>                     but there is a recipe to do so at
>>
>>
>>         https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settable
>> -polymorphic-identity
>>         <https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settabl
>> e-polymorphic-identity>
>>
>>         <https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settabl
>> e-polymorphic-identity
>>         <https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settabl
>> e-polymorphic-identity>>
>>
>>
>>         <https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settabl
>> e-polymorphic-identity
>>         <https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settabl
>> e-polymorphic-identity>
>>
>>         <https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settabl
>> e-polymorphic-identity
>>         <https://bitbucket.org/zzzeek/sqlalchemy/issues/2792/settabl
>> e-polymorphic-identity>>>.
>>
>>
>>
>>                     from sqlalchemy.ext.hybrid import hybrid_property
>>                     from sqlalchemy.ext.declarative import
>> declarative_base
>>                     from sqlalchemy.orm import sessionmaker, relationship,
>>                 column_property
>>                     from sqlalchemy import (
>>                         Column, Integer, ForeignKey, Text,
>>                         select, create_engine,
>>                     )
>>
>>                     Base = declarative_base()
>>
>>
>>                     class HybridType(Base):
>>                         __tablename__ = 'hybrid_types'
>>                         id = Column(Integer, primary_key=True)
>>                         name = Column(Text)
>>
>>
>>                     class HybridModel(Base):
>>                         __tablename__ = 'hybrids'
>>
>>                         id = Column(Integer, primary_key=True)
>>                         name = Column(Text)
>>                         hybrid_type_id = Column(Integer,
>>                 ForeignKey('hybrid_types.id <http://hybrid_types.id>
>>         <http://hybrid_types.id>
>>                     <http://hybrid_types.id>'))
>>                         hybrid_type = relationship('HybridType')
>>
>>                         hybrid_type_prop = column_property(
>>                             select([HybridType.name]).
>>                             where(HybridType.id == hybrid_type_id).
>>                             as_scalar()
>>                         )
>>
>>                         __mapper_args__ = {
>>                             "polymorphic_on": hybrid_type_prop
>>                         }
>>
>>                         def __repr__(self):
>>                             return "{} ({}:{})".format(type(self).__n
>> ame__,
>>                 self.name <http://self.name> <http://self.name>
>>                     <http://self.name>, self.id <http://self.id>
>>         <http://self.id> <http://self.id>)
>>
>>                         def __init__(self, **kwargs):
>>                             self.hybrid_type_name =
>>                     type(self).__mapper_args__['polymorphic_identity']
>>                             super(HybridModel, self).__init__(**kwargs)
>>
>>                         @hybrid_property
>>                         def hybrid_type_name(self):
>>                             return self.hybrid_type.name
>>         <http://self.hybrid_type.name>
>>                 <http://self.hybrid_type.name>
>>         <http://self.hybrid_type.name>
>>
>>                         @hybrid_type_name.setter
>>                         def hybrid_type_name(self, value):
>>                             self.hybrid_type_id = (
>>                                 select([HybridType.id]).
>>                                 where(HybridType.name == value)
>>                             )
>>
>>
>>                     class HybridAlpha(HybridModel):
>>                         __mapper_args__ = {'polymorphic_identity':
>> 'alpha'}
>>
>>
>>                     class HybridBeta(HybridModel):
>>                         __mapper_args__ = {'polymorphic_identity': 'beta'}
>>
>>
>>                     engine = create_engine('sqlite:///:memory:',
>> echo=True)
>>                     Base.metadata.create_all(engine)
>>                     Session = sessionmaker(bind=engine)
>>                     session = Session()
>>                     session.add(HybridType(name='alpha'))
>>                     session.add(HybridType(name='beta'))
>>                     session.add(HybridAlpha(name='alpha_instance'))
>>                     session.add(HybridBeta(name='beta_instance'))
>>                     print(session.query(HybridAlpha).all())
>>
>>
>>
>>                         On Tue, Nov 29, 2016 at 7:16 AM, mike bayer
>>                         <mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>
>>                 <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>>
>>                 <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>
>>         <mailto:mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com
>> >>>
>>                         <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>
>>                 <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>>
>>
>>                         <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>
>>                 <mailto:mike...@zzzcomputing.com
>>         <mailto:mike...@zzzcomputing.com>>>>> wrote:
>>
>>
>>
>>                             On 11/28/2016 05:58 PM, Tucker Beck wrote:
>>
>>                                 Hello, I'm writing today about an
>>         interesting
>>                 problem we ran
>>                                 into with
>>                                 our sqlalchemy based data store api.
>>
>>                                 Our schema is based on the star-schema
>> idea
>>                 where we have a
>>                                 large 'fact
>>                                 table' with lots of rows. Within that
>> table,
>>                 each row has a
>>                                 foreign key
>>                                 to a small 'dimension table' in which
>>         each row
>>                 has a unique
>>                                 name. Thus,
>>                                 the type of each row can be defined by the
>>                 relationship
>>                         between
>>                                 the fact
>>                                 row and the dimension row.
>>
>>                                 We wanted to be able to use SQLAlchemy
>>         to add
>>                 some custom
>>                                 functionality
>>                                 for the different types of rows we have
>>         in our 'fact
>>                         table'. After
>>                                 learning about SQLAlchemy's inheritance
>>         models, I
>>                         decided to see
>>                                 if we
>>                                 could support the schema that we had
>> already
>>                 devised for our
>>                                 project.
>>                                 The single-inheritance pattern seemed to
>>         fit the
>>                 best, but I
>>                                 couldn't
>>                                 find a single case where someone was
>> using a
>>                 star-schema and
>>                                 needed the
>>                                 type discriminator to be derived from the
>>                 foreign key to the
>>                                 dimension
>>                                 table.
>>
>>                                 Further, I found as I was digging into the
>>                 mechanics of the
>>                                 thing that
>>                                 you could not create a row in the fact
>> table
>>                 that was
>>                         typed by the
>>                                 derived class at creation time. And, you
>>         cannot
>>                 limit
>>                         queries
>>                                 from the
>>                                 fact table by creating the queries
>>         against the
>>                 derived
>>                         classes.
>>                                 Suppose
>>                                 that (using declarative base) I have the
>>         fact table
>>                         represented by a
>>                                 model called HybridModel. This model has
>> two
>>                 derived classes
>>                                 HybridAlpha
>>                                 and HybridBeta. I would like to be able to
>>                 create a new
>>                         row in
>>                                 the table
>>                                 wrapped by HybridModel by calling
>>         something like
>>                                 HybridAlpha(**kwargs)
>>                                 and have the type of the new row reflect
>> the
>>                 inheritance
>>                         model I've
>>                                 described above. Next I wanted to be able
>> to
>>                 formulate a
>>                         query
>>                                 against
>>                                 one of the derived models and have it
>>         limited by the
>>                         type associated
>>                                 with the derived class. So, calling
>>         something like
>>                                 `session.query(HybridAlpha).all()` would
>>         only return
>>                         rows with a
>>                                 type
>>                                 associated with the HybridAlpha model.
>>
>>                                 After a lot of tinkering and
>>         experimentation,
>>                 I've come
>>                         up with the
>>                                 following solution:
>>
>>
>>
>>
>>         https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f8075
>> c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>
>>
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>>
>>
>>
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>
>>
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>>>
>>
>>
>>
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>
>>
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>>
>>
>>
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>
>>
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89
>>         <https://gist.github.com/dusktreader/2658dedb8ca8e2fd941f807
>> 5c75b3c89>>>>
>>
>>                                 I would appreciate any thoughts and
>>         feedback on the
>>                         matter. I'm
>>                                 not sure
>>                                 that my approach to this solution has been
>>                 sound, and I
>>                         would
>>                                 appreciate
>>                                 feedback.
>>
>>
>>                             I'd try to do things much more simply than
>>         this.   Most
>>                         simply, just
>>                             assign polymorphic_identity to be the integer
>>                 foreign key value.
>>                             Otherwise, you should be able to do
>>         polymorphic_on on a
>>                         correlated
>>                             subquery, which itself you set up as a
>>                 column_property().
>>                          There
>>                             should be no need to modify Query or
>>         anything like that.
>>
>>
>>                             I'm out of time today but if you need more
>>         help I
>>                 can try to
>>                         work up
>>                             an example later on.
>>
>>
>>
>>
>>
>>
>>                                 Thanks, and keep up the great work!
>>         SQLAlchemy
>>                 is just
>>                         magic!
>>
>>                                 --
>>                                 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
>>         <http://stackoverflow.com/help/mcve>
>>                 <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>>
>>                         <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>
>>                 <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>>>
>>                                 <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>
>>                 <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>>
>>                         <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>
>>                 <http://stackoverflow.com/help/mcve
>>         <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
>>         <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>>
>>
>>         <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com>>>
>>
>>                 <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com>>
>>
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%2525252bunsubscr...@googlegroups.com>>>>
>>
>>         <mailto:sqlalchemy+unsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>>
>>
>>         <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com>>>
>>
>>                 <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com>>
>>
>>         <mailto:sqlalchemy%252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com>
>>                 <mailto:sqlalchemy%25252bunsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%2525252bunsubscr...@googlegroups.com>>>>>.
>>
>>                                 To post to this group, send email to
>>                         sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>>
>>                                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>
>>                         <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>>>
>>                                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>
>>                         <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>>
>>                                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>
>>                         <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>                 <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>>>>.
>>                                 Visit this group at
>>                         https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>
>>                 <https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>>
>>                         <https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>
>>                 <https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>>>
>>
>>         <https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>
>>                 <https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>>
>>                         <https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>
>>                 <https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>>>>.
>>                                 For more options, visit
>>                         https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>
>>                 <https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>>
>>                         <https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>
>>                 <https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>>>
>>                                 <https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>
>>                 <https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>>
>>                         <https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>
>>                 <https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>>>>.
>>
>>
>>                             --
>>                             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
>>         <http://stackoverflow.com/help/mcve>
>>                 <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>>
>>                         <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>
>>                 <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>>>
>>                             <http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve>
>>                 <http://stackoverflow.com/help/mcve
>
>


-- 
-=Tucker A. Beck=-

Illustrious Writer
  Devious Coder
    Last Hope for the Free World
      Also, Modest

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to