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? >> 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>>. >> >> >> >> 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...@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>>> >> >> 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/unsubscribe >> >. >> 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 -- 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.