Adding __abstract__ = True to the AbstractCoupe did seem to resolve those errors, but it gave me a new one:
________________________________________________________ from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declared_attr class AbstractVehicle(object): __tablename__ = "vehicles" id = Column(Integer, primary_key=True) name = Column(String, nullable=False) type = Column(String) __mapper_args__ = {"polymorphic_on": type} class AbstractCar(AbstractVehicle): __tablename__ = "cars" id = Column("id", Integer, primary_key=True) __mapper_args__ = {"polymorphic_identity": "car"} __table_args__ = ( ForeignKeyConstraint(["id"], ["vehicles.id"]), ) class AbstractCoupe(AbstractCar): __abstract__ = True __mapper_args__ = {"polymorphic_identity": "coupe"} Base = declarative_base() class Vehicle(AbstractVehicle, Base): pass class Car(AbstractCar, Vehicle): pass class Coupe(AbstractCoupe, Car): pass if __name__ == "__main__": e = create_engine("sqlite://", echo=True) Base.metadata.create_all(e) s = Session(e) s.add(Coupe(id=10, name="test")) s.commit() s.close() b1 = s.query(Coupe).first() print(b1) ________________________________________________________ Traceback (most recent call last): File "test.py", line 53, in <module> s.add(Coupe(id=10, name="test")) File "<string>", line 4, in __init__ File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/orm/state.py", line 306, in _initialize_instance manager.dispatch.init_failure(self, args, kwargs) File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__ compat.reraise(exc_type, exc_value, exc_tb) File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 184, in reraise raise value File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/orm/state.py", line 303, in _initialize_instance return manager.original_init(*mixed[1:], **kwargs) File "<string>", line 6, in __init__ File "<string>", line 6, in __init__ File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/ext/declarative/base.py", line 649, in _declarative_constructor setattr(self, k, kwargs[k]) File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/orm/attributes.py", line 223, in __set__ self.impl.set(instance_state(instance), AttributeError: 'NoneType' object has no attribute 'set' ________________________________________________________ When I take out the arguments and just run: s.add(Coupe()) It gives me this: ________________________________________________________ Traceback (most recent call last): File "test.py", line 53, in <module> s.add(Coupe()) File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/orm/session.py", line 1588, in add self._save_or_update_state(state) File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/orm/session.py", line 1602, in _save_or_update_state mapper = _state_mapper(state) File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 754, in __get__ obj.__dict__[self.__name__] = result = self.fget(obj) File "/mnt/hgfs/Documents/git/cc-mysql/env/lib/python3.5/site-packages/sqlalchemy/orm/instrumentation.py", line 116, in mapper raise exc.UnmappedClassError(self.class_) sqlalchemy.orm.exc.UnmappedClassError: Class '__main__.Coupe' is not mapped ________________________________________________________ Sorry for the intermittent responses. Thanks so much for your help! On Mon, Jun 27, 2016 at 2:21 PM, Mike Bayer <mike...@zzzcomputing.com> wrote: > I think it's OK to add __abstract__ to those mixins, in this case it seems > like the (pretty complicated) class graph is adding up to something that > causes declarative to see AbstractCar as mapped class thus a "car" table is > added. Adding __abstract__ to AbstractCoupe seems to resolve. > > > > > On 06/27/2016 05:10 PM, Angie Ellis wrote: > >> I implemented the changes you suggested, but I am running into errors >> with some polymorphic relations. Using a different theme, here is an >> example: >> >> >> class AbstractVehicle(object): >> __tablename__ = "vehicles" >> >> id = Column(Integer, primary_key=True) >> name = Column(String, nullable=False) >> type = Column(String) >> >> __mapper_args__ = {"polymorphic_on": type} >> >> >> class AbstractCar(AbstractVehicle): >> __tablename__ = "cars" >> >> id = Column("id", Integer, primary_key=True) >> >> __mapper_args__ = {"polymorphic_identity": "car"} >> __table_args__ = ( >> ForeignKeyConstraint(["id"], ["vehicles.id <http://vehicles.id >> >"]), >> >> ) >> >> >> class AbstractCoupe(AbstractCar): >> __mapper_args__ = {"polymorphic_identity": "coupe"} >> >> >> Base = declarative_base() >> >> >> class Vehicle(AbstractVehicle, Base): >> pass >> >> >> class Car(AbstractCar, Vehicle): >> pass >> >> >> class Coupe(AbstractCoupe, Car): >> pass >> >> >> This resulted in the following error: >> >> >> File ".../model/vehicle.py", line 255, in <module> >> class Coupe(AbstractCoupe, Car): >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py", >> line 55, in __init__ >> _as_declarative(cls, classname, cls.__dict__) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 88, in _as_declarative >> _MapperConfig.setup_mapping(cls, classname, dict_) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 103, in setup_mapping >> cfg_cls(cls_, classname, dict_) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 131, in __init__ >> self._setup_table() >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 395, in _setup_table >> **table_kw) >> File ".../env/lib/python2.7/site-packages/sqlalchemy/sql/schema.py", >> line 398, in __new__ >> "existing Table object." % key) >> InvalidRequestError: Table 'cars' is already defined for this MetaData >> instance. Specify 'extend_existing=True' to redefine options and >> columns on an existing Table object. >> >> >> After adding "extend_existing=True" to the AbstractCoupe model, I >> received this error: >> >> >> File ".../model/vehicle.py", line 255, in <module> >> class Coupe(AbstractCoupe, Car): >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py", >> line 55, in __init__ >> _as_declarative(cls, classname, cls.__dict__) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 88, in _as_declarative >> _MapperConfig.setup_mapping(cls, classname, dict_) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 103, in setup_mapping >> cfg_cls(cls_, classname, dict_) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 135, in __init__ >> self._early_mapping() >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 138, in _early_mapping >> self.map() >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", >> line >> 530, in map >> **self.mapper_args >> File "<string>", line 2, in mapper >> File ".../env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", >> line 627, in __init__ >> self._configure_properties() >> File ".../env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", >> line 1292, in _configure_properties >> self._adapt_inherited_property(key, prop, False) >> File ".../env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", >> line 1514, in _adapt_inherited_property >> self._configure_property(key, prop, init=False, setparent=False) >> File ".../env/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", >> line 1541, in _configure_property >> prop.columns[0]) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/sql/selectable.py", line >> 476, in corresponding_column >> if self.c.contains_column(column): >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", >> line 754, in __get__ >> obj.__dict__[self.__name__] = result = self.fget(obj) >> File >> ".../env/lib/python2.7/site-packages/sqlalchemy/sql/selectable.py", line >> 553, in columns >> return self._columns.as_immutable() >> AttributeError: 'Table' object has no attribute '_columns' >> >> >> Is there a way to fix or work around this? >> >> Thanks, >> Angie >> >> On Wed, Jun 22, 2016 at 7:27 PM, Mike Bayer <mike...@zzzcomputing.com >> <mailto:mike...@zzzcomputing.com>> wrote: >> >> >> >> On 06/22/2016 04:53 PM, Angie Ellis wrote: >> >> Mike, >> >> Thank you for the response! I do have control over the external >> library. >> I like your idea having both the abstract classes and concrete >> classes >> available in the library because I have use cases for both in my >> applications. However, I'm not quite sure how to configure the >> inheritance and declarative base. What am I doing wrong here? >> >> >> class AbstractFoo(object): >> __abstract__ = True >> __tablename__ = "foo" >> id = Column(Integer, primary_key=True) >> type = Column(String) >> foo_bar_id = Column(Integer, ForeignKey("foo_bar.id >> <http://foo_bar.id> >> <http://foo_bar.id>")) >> foo_bar = relationship("FooBar", backref=backref("foo")) >> >> __mapper_args__ = {"polymorphic_on": type} >> >> >> class AbstractBar(object): >> __abstract__ = True >> __mapper_args__ = {"polymorphic_identity": "bar"} >> >> >> class AbstractFooBar(object): >> __abstract__ = True >> __tablename__ = "foo_bar" >> id = Column(Integer, primary_key=True) >> >> >> >> Base = declarative_base() >> >> >> class Foo(AbstractFoo, Base): >> pass >> >> >> class Bar(AbstractBar, Foo): >> pass >> >> >> class FooBar(AbstractFooBar, Base): >> pass >> >> >> Does AbstractBar need to inherit from AbstractFoo? Do the abstract >> classes need to inherit their own declarative base? Do I need to >> change >> the inheritance order? The classes Foo, Bar, and FooBar are not >> getting >> mapped. >> >> >> So the way you have it is that those are mixins, which is fine, and >> I guess that's how we need it because you want to keep multiple >> Base's in play at the same time. You don't need the __abstract__ >> keyword in that case. So to map that looks like the following POC: >> >> from sqlalchemy import * >> from sqlalchemy.orm import * >> from sqlalchemy.ext.declarative import declarative_base >> from sqlalchemy.ext.declarative import declared_attr >> >> >> class AbstractFoo(object): >> __tablename__ = "foo" >> >> id = Column(Integer, primary_key=True) >> type = Column(String) >> >> @declared_attr >> def foo_bar_id(cls): >> return Column(Integer, ForeignKey("foo_bar.id >> <http://foo_bar.id>")) >> >> >> @declared_attr >> def foo_bar(cls): >> return relationship("FooBar", backref=backref("foo")) >> >> __mapper_args__ = {"polymorphic_on": type} >> >> >> class AbstractBar(AbstractFoo): >> __mapper_args__ = {"polymorphic_identity": "bar"} >> >> >> class AbstractFooBar(object): >> __tablename__ = "foo_bar" >> id = Column(Integer, primary_key=True) >> >> >> Base = declarative_base() >> >> >> class Foo(AbstractFoo, Base): >> pass >> >> >> class Bar(AbstractBar, Foo): >> pass >> >> >> class FooBar(AbstractFooBar, Base): >> pass >> >> e = create_engine("sqlite://", echo=True) >> Base.metadata.create_all(e) >> s = Session(e) >> >> s.add(Bar(foo_bar=FooBar())) >> >> s.commit() >> s.close() >> >> b1 = s.query(Foo).first() >> print b1 >> print b1.foo_bar >> >> >> >> >> >> >> Thanks, >> Angie >> >> On Fri, Jun 3, 2016 at 12:38 PM, Mike Bayer >> <mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com> >> <mailto:mike...@zzzcomputing.com >> >> <mailto:mike...@zzzcomputing.com>>> wrote: >> >> >> >> On 06/03/2016 02:44 PM, Angie E wrote: >> >> Rather than creating mixin classes that models inherit >> from, I >> have a >> use case that requires me to configure classes the other >> way >> around. The >> classes that would normally be mixin classes need to be >> the >> classes that >> inherit from the models as well as the class that model >> objects are >> created from. This is because the models and the mapper >> configurations >> are in an external library from the main repository. I >> need to >> pass in >> the host for the engine from the main repository to the >> models >> library >> before any of the models are loaded so they can load >> with the >> declarative base already configured. >> >> >> I hope you are using reflection for these models, otherwise >> there's >> no reason to have a depedency on the Engine for the model >> declaration. >> >> >> After the engine information is >> >> passed in, the session, Base class, and everything is >> created >> within a >> sort of base class that the models inherit from. Here is a >> simplified >> example: >> >> >> class SQLAlchemyBase(object): >> metadata = None >> Session = None >> Base = object >> sessionfactory = sessionmaker() >> >> def initialize(self, host): >> engine = create_engine(host) >> self.metadata = MetaData(bind=engine) >> self.Session = scoped_session(self.sessionfactory) >> self.Base = >> declarative_base(metadata=self.metadata) >> >> models = SQLAlchemyBase() >> >> (The models inherit from models.Base) >> >> >> So the SQLAlchemyBase will be imported into the main >> repository, the >> initialize method will be called, passing in the host >> for the >> engine, >> and the models can then be imported. >> >> >> Looks like no reflection taking place. I'd do away with the >> MetaData(bind=engine), and just have the engine as part of the >> sessionmaker(), and the sessionmaker() here also doesn't need >> to >> have anything to do with the "library", if the "library" is >> just >> defining model classes. >> >> The "bound metadata" pattern is highly discouraged in modern >> SQLAlchemy because it leads to this kind of confusion, e.g. >> that one >> needs an Engine in order to declare models. You don't. >> >> >> >> >> >> >> The main repository has its own >> >> classes with the same names as the models and have >> additional >> methods >> that a normal mixin class would have to extend >> functionality. >> However, I >> am unable to create model objects using the classes in >> the main >> repository because I can't get the mappers to play nice >> with this >> unusual inheritance that extends from the external >> models library. >> Additionally, in the models library, there are models >> that have >> multiple >> levels of inherited polymorphic relationships. Here is an >> example that >> is similar one of the more basic inherited polymorphic >> relationships: >> >> >> **Models Library** >> >> class Foo(models.Base): >> >> __tablename__ = "foo" >> id = Column(Integer, primary_key=True) >> type = Column(String) >> foo_bar_id = Column(Integer, ForeignKey("foo_bar.id >> <http://foo_bar.id> >> <http://foo_bar.id>")) >> >> foo_bar = relationship(Foo, backref=backref("foos")) >> >> __mapper_args__ = {"polymorphic_on": type} >> >> >> class Bar(Foo): >> >> __mapper_args__ = {"polymorphic_identity": "bar"} >> >> >> class FooBar(models.Base): >> >> __tablename__ = "foo_bar" >> id = Column(Integer, primary_key=True) >> >> >> **Main Repository** >> >> from separate_library.models import models, Foo as >> BaseFoo, Bar as >> BaseBar, FooBar as BaseFooBar >> >> >> class Foo(BaseFoo): >> >> @classmethod >> def custom_create_method(cls, **kw): >> foo_obj = cls(**kw) >> models.session.add(foo_obj) >> models.session.flush() >> >> >> class Bar(BaseBar): >> pass >> >> >> class FooBar(BaseFooBar): >> pass >> >> >> The original error I was getting was something like this: >> >> "InvalidRequestError: One or more mappers failed to >> initialize - >> can't >> proceed with initialization of other mappers. Original >> exception was: >> Multiple classes found for path "Foo" in the registry of >> this >> declarative base. Please use a fully module-qualified >> path." >> >> >> that only happens if someone is using a string name inside of >> relationship(), like this: >> >> foobars = relationship("Foo") >> >> If the "library" is doing that, and you can't change it, easy >> solution, use a different name for your "Foo" that's also in >> the 3rd >> party library. Or declare your classes against a different >> base: >> >> Base = declarative_base() >> >> class Foo(other_package.Foo, Base): >> # ... >> >> >> class Bar(other_package.Bar, Base): >> # ... >> >> I'm not 100% sure that will work but there's probably a way >> to make >> that work. >> >> >> >> >> So I tried putting the full path in the relationships. >> Then it >> started >> giving me an error like this: >> >> >> oh, OK, then you're fine there. >> >> >> >> "FlushError: Attempting to flush an item of type <class >> 'main_module.models.Foo'> as a member of collection >> "FooBar.foos". >> Expected an object of type <class >> 'separate_library.models.Foo'> >> or a >> polymorphic subclass of this type. If <class >> 'main_module.models.Foo'> >> is a subclass of <class 'separate_library.models.Foo'>, >> configure mapper >> "Mapper|Foo|foos" to load this subtype polymorphically, >> or set >> enable_typechecks=False to allow any subtype to be >> accepted for >> flush. >> >> >> Well, when this relationship loads, you'd like it to return >> a list >> of main_module.models.Foo objects and not >> separate_library.models.Foo. Your model here needs to have a >> polymorphic identity assigned so that it can do this. I >> don't see >> those set up in your mappings, you need to put those in >> explcitly. >> If you're trying to re-use the same names that the >> superclass has, >> you might need to manipulate Foo.__mapper__.polymorphic_map >> directly, not sure. >> >> >> >> >> Essentially, the main problem is getting the classes in >> the main >> module >> to point to and act like the model classes. For example, >> when I >> try to >> create relationships, it says it expected an object of >> type >> 'separate_library.models.Foo' instead of >> 'main_module.models.Foo'. >> >> >> other than using a different name, there are ways to >> manipulate the >> registry that is doing this but they aren't publicly supported >> patterns, unless the easy "use a different Base" trick works >> out here. >> >> Additionally, in the polymorphic relationships, I can't >> get the >> polymorphic_identity to populate for the polymorphic_on >> column. For >> example, Bar in the main repository will have the 'type' >> column >> empty >> when the object is initially created. >> >> >> when you make a subclass like you are doing, you need to >> give it its >> own identity, so it at least needs to have >> "polymorphic_identity" >> set up locally. >> >> Overall there would be a question here, which is: do you have >> control over this external library? If so, I would design >> it to be >> used for subclassing by another declarative system. Assign >> names >> like "AbstractFoo" to the classes and additionally use the >> __abstract__ = True declarative flag to mark them as such, >> then use >> @declared_attr around __mapper_args__ to assign mapper >> arguments >> like polymorphic identity to subclasses properly. >> >> If you do *not* have control over this external library, >> then it is >> not intended to be used in this way; the most preferable way >> to go >> about this would be to get the maintainers of it to change it >> in >> order to allow it to be used in this way. An easy way for >> the >> external library to work like this would be that it supplies >> both >> the __abstract__ classes with nice names like AbstractFoo, >> then for >> its own purposes it supplies its own Foo / Bar concrete >> classes on >> top of a separate declarative Base, and you'd skip using >> that part. >> >> >> >> >> One idea I tried was to add a metaclass to the >> declarative base >> in the >> models library and modify the mappers in the __init__ >> method during >> their initialization. I made progress this way, but >> haven't >> gotten it to >> work completely. >> >> >> There's proabably ways to make this work with more tricks and >> metaclasses but they aren't supported on the SQLAlchemy end >> and they >> will be brittle, they will break when declarative changes how >> it >> does things internally. >> >> >> >> Sorry for the complex explanation, but this is a complex >> problem. I am >> not able to change anything about the models or the use >> case, >> unfortunately. I have to work within these constraints. >> >> >> If these are two different systems within your company, it >> would be >> a better investment to get the upstream system to work more >> flexibly, rather than invest efforts working around the >> system's >> limitations downstream. But, if the overlapping names and the >> polymorphic identities are the only problem you should be >> able to >> work around those. >> >> >> >> If anyone can >> >> offer ideas on how to configure the mappers for the >> classes in >> the main >> repository to act like the models in the model library, >> I would >> be very >> grateful. >> >> -- >> 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. >> For more options, visit >> https://groups.google.com/d/optout. >> >> >> -- >> 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/u_CiTJIK9Gs/unsubscribe. >> 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. >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> 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. >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> 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/u_CiTJIK9Gs/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. >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> 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>. >> Visit this group at https://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > 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/u_CiTJIK9Gs/unsubscribe. > To unsubscribe from this group and all its topics, 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. > -- 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.