Another update on this issue. It seems that the issue stems from having a declared_attr for the __tablename__. If I remove that and make it a static class attribute, things work as expected.
On Tue, Dec 27, 2016 at 1:36 PM, Tucker Beck <tucker.b...@gmail.com> 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') > > 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. > > 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 > > 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> > 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>')) >>> 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>, 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> >>> >>> @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>> 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_polymorphic_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>>> 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?h >>> ighlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on> >>> >>> <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?h >>> ighlight=polymorphic_on#sqlalchemy.orm.mapper.params.polymorphic_on >>> <http://docs.sqlalchemy.org/en/latest/orm/mapping_api.html?h >>> ighlight=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>>. >>> >>> >>> >>> 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>')) >>> 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).__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 = >>> 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> >>> >>> @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_mp@zzzcomputing.c >>> om>> >>> <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>>> >>> >>> 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>>> 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+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>>>>. >>> >>> 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>>>>. >>> 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>>>. >>> 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>>>. >>> >>> >>> -- >>> 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>>> for a full description. >>> --- You received this message because you are >>> subscribed to >>> a topic >>> in the Google Groups "sqlalchemy" group. >>> To unsubscribe from this topic, visit >>> >>> >>> https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/uns >>> ubscribe >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe> >>> >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe>> >>> >>> >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe> >>> >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe>>>. >>> To unsubscribe from this group and all its topics, >>> 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>>>. >>> 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>>>. >>> 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>>>. >>> 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>>>. >>> >>> >>> >>> >>> >>> -- >>> -=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 >>> <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+unsubscr...@googlegroups.com >>> <mailto:sqlalchemy%2bunsubscr...@googlegroups.com> >>> <mailto:sqlalchemy%2bunsubscr...@googlegroups.com >>> <mailto:sqlalchemy%252bunsubscr...@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>>>. >>> 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>>. >>> 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>>. >>> >>> >>> -- >>> 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>> for a full description. >>> --- You received this message because you are subscribed to >>> a topic >>> in the Google Groups "sqlalchemy" group. >>> To unsubscribe from this topic, visit >>> >>> https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/uns >>> ubscribe >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe> >>> >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe>>. >>> To unsubscribe from this group and all its topics, send an >>> email to >>> sqlalchemy+unsubscr...@googlegroups.com >>> <mailto:sqlalchemy%2bunsubscr...@googlegroups.com> >>> <mailto:sqlalchemy%2bunsubscr...@googlegroups.com >>> <mailto:sqlalchemy%252bunsubscr...@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>>. >>> 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>>. >>> 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>>. >>> >>> >>> >>> >>> -- >>> -=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 >>> <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+unsubscr...@googlegroups.com >>> <mailto:sqlalchemy%2bunsubscr...@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>>. >>> Visit this group at 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>. >>> >>> >>> -- >>> 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> for a full description. >>> --- You received this message because you are subscribed to a topic >>> in the Google Groups "sqlalchemy" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/unsubscribe >>> <https://groups.google.com/d/topic/sqlalchemy/KJXSHwbhbLA/un >>> subscribe>. >>> To unsubscribe from this group and all its topics, send an email to >>> sqlalchemy+unsubscr...@googlegroups.com >>> <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>. >>> To post to this group, send email to sqlalchemy@googlegroups.com >>> <mailto:sqlalchemy@googlegroups.com>. >>> Visit this group at 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>. >>> >>> >>> >>> >>> -- >>> -=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 >>> <mailto:sqlalchemy+unsubscr...@googlegroups.com>. >>> To post to this group, send email to sqlalchemy@googlegroups.com >>> <mailto:sqlalchemy@googlegroups.com>. >> >> > > > -- > -=Tucker A. Beck=- > > Illustrious Writer > Devious Coder > Last Hope for the Free World > Also, Modest > -- -=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.