On Wed, Oct 10, 2018 at 2:57 PM Alex Rothberg <[email protected]> wrote: > > I actually have that newest warning about "'passive_deletes' is normally > configured on..." coming up in quite a few places in my codebase, In those > cases I had added passive_deletes for the same reason as here: to avoid a > load in the case of a delete. In some / many of those other places, I don't > have overlapping fks. > > I guess to make my earlier point more clear: is there any chance we could add > a flag, etc allowing a viewonly=False but where all of the fks are not set by > relationship?
If we are talking about changing the library, then we should work on solving use cases, not allowing for hacks to not raise warnings. > > On Wednesday, October 10, 2018 at 2:54:18 PM UTC-4, Mike Bayer wrote: >> >> the warnings here are really just to prevent a whole set of very >> common mistakes - if the usage was never valid, then it would be >> raising an error. You're doing something that nobody ever does which >> is have two foreign keys on the same columns, so none of these >> warnings apply. i dont know what other approach SQLAlchemy could >> have for this kind of thing. >> >> >> >> On Wed, Oct 10, 2018 at 2:08 PM Alex Rothberg <[email protected]> wrote: >> > >> > Adding the passive delete fixes the raise load but adds yet another >> > warning from sqla: >> > >> > sqlalchemy/orm/relationships.py:1790: SAWarning: On >> > Employee._ft_for_dependency, 'passive_deletes' is normally configured on >> > one-to-many, one-to-one, many-to-many relationships only. >> > >> > Looking at this: >> > @event.listens_for(Session, "before_flush") >> > def _add_dep(session, context, objects): >> > context.dependencies.update([ >> > ( >> > unitofwork.SaveUpdateAll(context, inspect(FundTitle)), >> > unitofwork.SaveUpdateAll(context, inspect(Employee)) >> > ) >> > ]) >> > >> > do I not have to mark one Model as dependent on the other? Or is that >> > implied by the order of the list? >> > >> > On Wednesday, October 10, 2018 at 1:36:09 PM UTC-4, Mike Bayer wrote: >> >> >> >> On Wed, Oct 10, 2018 at 1:32 PM Alex Rothberg <[email protected]> wrote: >> >> > >> >> > Well the other way doesn't quite work as if I mark none of the columns >> >> > as foreign in the primary join, sqla then assumes / guesses all of them >> >> > are. >> >> >> >> that is the case, that is code that has changed a lot over the years >> >> so it has a lot of baggage. >> >> >> >> >> >> >> >> > >> >> > Let me test with passive. >> >> > >> >> > On Wed, Oct 10, 2018, 13:30 Mike Bayer <[email protected]> wrote: >> >> >> >> >> >> On Wed, Oct 10, 2018 at 1:27 PM Alex Rothberg <[email protected]> >> >> >> wrote: >> >> >> > >> >> >> > And I'll reiterate, not worth doing it all from the original single >> >> >> > relationship (ie not needing to either add more relationships, have >> >> >> > warnings or use the more obscure feature you outlined)? Seems like >> >> >> > that would be cleaner in code. >> >> >> >> >> >> you mean take the viewonly=True off the existing relationship? sure >> >> >> you can do that. but if you mutate the elements in that collection, >> >> >> you can incur a change that is conflicting with the other objects. >> >> >> that's why I suggested making the non-viewonly a private member, but >> >> >> either way works. >> >> >> >> >> >> >> >> >> > >> >> >> > On Wed, Oct 10, 2018, 13:17 Mike Bayer <[email protected]> >> >> >> > wrote: >> >> >> >> >> >> >> >> the raise load issue is because without passive_deletes, it has to >> >> >> >> load the collection to make sure those objects are all updated. >> >> >> >> passive_deletes fixes, now you just have a warning. or use the unit >> >> >> >> of work recipe which is more direct. >> >> >> >> On Wed, Oct 10, 2018 at 1:15 PM Alex Rothberg <[email protected]> >> >> >> >> wrote: >> >> >> >> > >> >> >> >> > Not just for warning. Also this raise load issue. yes, i see that >> >> >> >> > I can't mark none. If I could though, that would be awesome since >> >> >> >> > I think it would solve this problem? I can test by setting one >> >> >> >> > foreign and seeing if that works. >> >> >> >> > >> >> >> >> > On Wednesday, October 10, 2018 at 1:13:32 PM UTC-4, Mike Bayer >> >> >> >> > wrote: >> >> >> >> >> >> >> >> >> >> On Wed, Oct 10, 2018 at 12:56 PM Alex Rothberg >> >> >> >> >> <[email protected]> wrote: >> >> >> >> >> > >> >> >> >> >> > let me get that. in the meantime, what are your thoughts on >> >> >> >> >> > just removing the view only from the original relationship and >> >> >> >> >> > then using an explicit primary join where none of the columns >> >> >> >> >> > are marked foreign? Theoretically that should solve this >> >> >> >> >> > problem, no? >> >> >> >> >> >> >> >> >> >> is this just for the warning? I don't think the >> >> >> >> >> relationship() can >> >> >> >> >> be set up with no columns marked as foreign, it takes that as a >> >> >> >> >> cue >> >> >> >> >> that it should figure out the "foreign" columns on its own. >> >> >> >> >> >> >> >> >> >> There's another way to make sure Employee is always dependent on >> >> >> >> >> FundTitle but it's a little bit off-label. Add the >> >> >> >> >> dependency you >> >> >> >> >> want directly into the unit of work: >> >> >> >> >> >> >> >> >> >> from sqlalchemy.orm import unitofwork >> >> >> >> >> from sqlalchemy import event >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> @event.listens_for(Session, "before_flush") >> >> >> >> >> def _add_dep(session, context, objects): >> >> >> >> >> context.dependencies.update([ >> >> >> >> >> ( >> >> >> >> >> unitofwork.SaveUpdateAll(context, >> >> >> >> >> inspect(FundTitle)), >> >> >> >> >> unitofwork.SaveUpdateAll(context, inspect(Employee)) >> >> >> >> >> ) >> >> >> >> >> ]) >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> >> > On Wednesday, October 10, 2018 at 12:41:25 PM UTC-4, Alex >> >> >> >> >> > Rothberg wrote: >> >> >> >> >> >> >> >> >> >> >> >> Is it possible to specific a non viewonly relationship in >> >> >> >> >> >> which I have a primary join specified in which none of the >> >> >> >> >> >> fk's are marked "foreign"? ie where I can mark the >> >> >> >> >> >> relationship dependancy but it wont set any columns? It looks >> >> >> >> >> >> like there may be some logic in sqla that assume all columns >> >> >> >> >> >> are fk if none are specified as foreign? >> >> >> >> >> >> >> >> >> >> >> >> On Wednesday, October 10, 2018 at 11:56:49 AM UTC-4, Alex >> >> >> >> >> >> Rothberg wrote: >> >> >> >> >> >>> >> >> >> >> >> >>> So one minor issue and one big issue with that solution: >> >> >> >> >> >>> 1. minor issue, I now get these: SAWarning: relationship >> >> >> >> >> >>> 'XXXX' will copy columnYYYY to column ZZZZ, which conflicts >> >> >> >> >> >>> with relationship(s): '.... >> >> >> >> >> >>> 2. major issue, I use raiseload("*") and now I start seeing: >> >> >> >> >> >>> sqlalchemy.exc.InvalidRequestError: >> >> >> >> >> >>> 'Employee._ft_for_dependency' is not available due to >> >> >> >> >> >>> lazy='raise' >> >> >> >> >> >>> >> >> >> >> >> >>> On Wednesday, October 10, 2018 at 9:57:55 AM UTC-4, Mike >> >> >> >> >> >>> Bayer wrote: >> >> >> >> >> >>>> >> >> >> >> >> >>>> On Tue, Oct 9, 2018 at 6:45 PM Alex Rothberg >> >> >> >> >> >>>> <[email protected]> wrote: >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > Okay with some small tweaks to your original code, I am >> >> >> >> >> >>>> > able to show the issue I am having. comment out flush to >> >> >> >> >> >>>> > see issue: >> >> >> >> >> >>>> >> >> >> >> >> >>>> so what you're doing here is making Employee dependent on >> >> >> >> >> >>>> FundTitle, >> >> >> >> >> >>>> which makes this a little out of the ordinary but this is >> >> >> >> >> >>>> fine. You >> >> >> >> >> >>>> need to give the ORM a clue that this dependency exists, >> >> >> >> >> >>>> since it >> >> >> >> >> >>>> never looks at foreign key constraints unless you tell it >> >> >> >> >> >>>> to. >> >> >> >> >> >>>> Adding a relationship to FundTitle that doesn't have >> >> >> >> >> >>>> viewonly=True is >> >> >> >> >> >>>> an easy way to do this, there's no need to ever make use of >> >> >> >> >> >>>> the >> >> >> >> >> >>>> relationship otherwise: >> >> >> >> >> >>>> >> >> >> >> >> >>>> class Employee(Base): >> >> >> >> >> >>>> __tablename__ = 'employee' >> >> >> >> >> >>>> >> >> >> >> >> >>>> # ... >> >> >> >> >> >>>> fund_title = relationship(FundTitle, viewonly=True) >> >> >> >> >> >>>> >> >> >> >> >> >>>> _ft_for_dependency = relationship(FundTitle) >> >> >> >> >> >>>> >> >> >> >> >> >>>> __table_args__ = ( >> >> >> >> >> >>>> ForeignKeyConstraint( >> >> >> >> >> >>>> (title_id, department_id, fund_id), >> >> >> >> >> >>>> (FundTitle.title_id, FundTitle.department_id, >> >> >> >> >> >>>> FundTitle.fund_id) >> >> >> >> >> >>>> ), >> >> >> >> >> >>>> ) >> >> >> >> >> >>>> >> >> >> >> >> >>>> then you can take the flush() out and there's no issue, as >> >> >> >> >> >>>> long as >> >> >> >> >> >>>> you're always making sure that FundTitle object is present >> >> >> >> >> >>>> either in >> >> >> >> >> >>>> the current Session or the row in the database exists. >> >> >> >> >> >>>> >> >> >> >> >> >>>> >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > from sqlalchemy import * >> >> >> >> >> >>>> > from sqlalchemy.orm import * >> >> >> >> >> >>>> > from sqlalchemy.ext.declarative import declarative_base >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > Base = declarative_base() >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > class Title(Base): >> >> >> >> >> >>>> > __tablename__ = 'title' >> >> >> >> >> >>>> > id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> > department_id = Column(ForeignKey('department.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > department = relationship(lambda: Department) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > class Department(Base): >> >> >> >> >> >>>> > __tablename__ = 'department' >> >> >> >> >> >>>> > id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > class Fund(Base): >> >> >> >> >> >>>> > __tablename__ = 'fund' >> >> >> >> >> >>>> > id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> > title_id = Column(ForeignKey('title.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > department_id = Column(ForeignKey('department.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > department = relationship("Department") >> >> >> >> >> >>>> > title = relationship("Title") >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > class FundTitle(Base): >> >> >> >> >> >>>> > __tablename__ = 'fund_title' >> >> >> >> >> >>>> > id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> > title_id = Column(ForeignKey('title.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > department_id = Column(ForeignKey('department.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > fund_id = Column(ForeignKey('fund.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > department = relationship("Department") >> >> >> >> >> >>>> > title = relationship("Title") >> >> >> >> >> >>>> > fund = relationship("Fund") >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > __table_args__ = ( >> >> >> >> >> >>>> > UniqueConstraint( >> >> >> >> >> >>>> > title_id, department_id, fund_id >> >> >> >> >> >>>> > ), >> >> >> >> >> >>>> > ) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > class Employee(Base): >> >> >> >> >> >>>> > __tablename__ = 'employee' >> >> >> >> >> >>>> > id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> > title_id = Column(ForeignKey('title.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > department_id = Column(ForeignKey('department.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > fund_id = Column(ForeignKey('fund.id'), >> >> >> >> >> >>>> > nullable=False) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > department = relationship(lambda: Department) >> >> >> >> >> >>>> > title = relationship("Title") >> >> >> >> >> >>>> > fund = relationship("Fund") >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > fund_title = relationship(FundTitle, viewonly=True) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > __table_args__ = ( >> >> >> >> >> >>>> > ForeignKeyConstraint( >> >> >> >> >> >>>> > (title_id, department_id, fund_id), >> >> >> >> >> >>>> > (FundTitle.title_id, FundTitle.department_id, >> >> >> >> >> >>>> > FundTitle.fund_id) >> >> >> >> >> >>>> > ), >> >> >> >> >> >>>> > ) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > e = create_engine("postgresql://localhost/test_issue", >> >> >> >> >> >>>> > echo=False) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > # Base.metadata.drop_all(e) >> >> >> >> >> >>>> > Base.metadata.create_all(e) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > s = Session(e) >> >> >> >> >> >>>> > # s.rollback() >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > while True: >> >> >> >> >> >>>> > d1 = Department() >> >> >> >> >> >>>> > t1 = Title(department=d1) >> >> >> >> >> >>>> > f1 = Fund(department=d1, title=t1) >> >> >> >> >> >>>> > ft1 = FundTitle(title=t1, department=d1, fund=f1) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > s.add_all([d1, t1, f1, ft1]) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > s.flush() >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > e1 = Employee(title=t1, department=d1, fund=f1) >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > s.add_all([e1,]) >> >> >> >> >> >>>> > s.commit() >> >> >> >> >> >>>> > >> >> >> >> >> >>>> > On Tuesday, October 9, 2018 at 12:20:30 PM UTC-4, Mike >> >> >> >> >> >>>> > Bayer wrote: >> >> >> >> >> >>>> >> >> >> >> >> >> >>>> >> On Tue, Oct 9, 2018 at 10:44 AM Alex Rothberg >> >> >> >> >> >>>> >> <[email protected]> wrote: >> >> >> >> >> >>>> >> > >> >> >> >> >> >>>> >> > In looking at what you wrote doesn't this cause an fk >> >> >> >> >> >>>> >> > violation (it does for me): >> >> >> >> >> >>>> >> > 2018-10-08 10:18:38,760 INFO >> >> >> >> >> >>>> >> > sqlalchemy.engine.base.Engine INSERT INTO employee >> >> >> >> >> >>>> >> > (title_id, department_id, fund_id) VALUES >> >> >> >> >> >>>> >> > (%(title_id)s, %(department_id)s, %(fund_id)s) >> >> >> >> >> >>>> >> > RETURNING employee.id >> >> >> >> >> >>>> >> > 2018-10-08 10:18:38,763 INFO >> >> >> >> >> >>>> >> > sqlalchemy.engine.base.Engine INSERT INTO fund_title >> >> >> >> >> >>>> >> > (title_id, department_id, fund_id) VALUES >> >> >> >> >> >>>> >> > (%(title_id)s, %(department_id)s, %(fund_id)s) >> >> >> >> >> >>>> >> > RETURNING fund_title.id >> >> >> >> >> >>>> >> > >> >> >> >> >> >>>> >> > in that a a (non deferred) fk is violated between >> >> >> >> >> >>>> >> > employee and fund_title ? >> >> >> >> >> >>>> >> >> >> >> >> >> >>>> >> see we need to see how youve laid out your >> >> >> >> >> >>>> >> ForeignKeyConstraints, if >> >> >> >> >> >>>> >> they are composite and overlapping, there are additional >> >> >> >> >> >>>> >> options that >> >> >> >> >> >>>> >> may be needed (specifically the post_update flag). >> >> >> >> >> >>>> >> you'll note I laid >> >> >> >> >> >>>> >> out all FKs as single column. >> >> >> >> >> >>>> >> >> >> >> >> >> >>>> >> > >> >> >> >> >> >>>> >> > On Mon, Oct 8, 2018 at 10:20 AM Mike Bayer >> >> >> >> >> >>>> >> > <[email protected]> wrote: >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> On Sun, Oct 7, 2018 at 7:11 PM Alex Rothberg >> >> >> >> >> >>>> >> >> <[email protected]> wrote: >> >> >> >> >> >>>> >> >> > >> >> >> >> >> >>>> >> >> > Okay so I investigated / thought about this >> >> >> >> >> >>>> >> >> > further. The issue is that while I do have a >> >> >> >> >> >>>> >> >> > relationship between the various models, some of >> >> >> >> >> >>>> >> >> > the relationships are viewonly since I have >> >> >> >> >> >>>> >> >> > overlapping fks. >> >> >> >> >> >>>> >> >> > >> >> >> >> >> >>>> >> >> > For example I have a model Employee, which has fks: >> >> >> >> >> >>>> >> >> > department_id, title_id, and fund_id. The related >> >> >> >> >> >>>> >> >> > models are Department (fk department_id), Title (fk >> >> >> >> >> >>>> >> >> > department_id and title_id) , Fund (fk fund_id) and >> >> >> >> >> >>>> >> >> > FundTitle (fk department_id, title_id and fund_id). >> >> >> >> >> >>>> >> >> > I have set FundTitle to viewonly. When updating / >> >> >> >> >> >>>> >> >> > creating an Employee, I do create and add a new >> >> >> >> >> >>>> >> >> > FundTitle to the session, however I don't assign it >> >> >> >> >> >>>> >> >> > to the employee as the relationship is viewonly. If >> >> >> >> >> >>>> >> >> > I don't flush before making the assignment, the >> >> >> >> >> >>>> >> >> > final flush / commit attempts to update / create >> >> >> >> >> >>>> >> >> > the employee before creating the FundTitle. >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> let's work with source code that is runnable (e.g. >> >> >> >> >> >>>> >> >> MCVE). Below is >> >> >> >> >> >>>> >> >> the model that it seems you are describing, and then >> >> >> >> >> >>>> >> >> there's a >> >> >> >> >> >>>> >> >> demonstration of assembly of all those components >> >> >> >> >> >>>> >> >> using relationships, >> >> >> >> >> >>>> >> >> a single flush and it all goes in in the correct >> >> >> >> >> >>>> >> >> order, all FKs are >> >> >> >> >> >>>> >> >> nullable=False. >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> from sqlalchemy import * >> >> >> >> >> >>>> >> >> from sqlalchemy.orm import * >> >> >> >> >> >>>> >> >> from sqlalchemy.ext.declarative import >> >> >> >> >> >>>> >> >> declarative_base >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> Base = declarative_base() >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> class Employee(Base): >> >> >> >> >> >>>> >> >> __tablename__ = 'employee' >> >> >> >> >> >>>> >> >> id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> >> >> title_id = Column(ForeignKey('title.id'), >> >> >> >> >> >>>> >> >> nullable=False) >> >> >> >> >> >>>> >> >> department_id = >> >> >> >> >> >>>> >> >> Column(ForeignKey('department.id'), nullable=False) >> >> >> >> >> >>>> >> >> fund_id = Column(ForeignKey('fund.id'), >> >> >> >> >> >>>> >> >> nullable=False) >> >> >> >> >> >>>> >> >> department = relationship("Department") >> >> >> >> >> >>>> >> >> title = relationship("Title") >> >> >> >> >> >>>> >> >> fund = relationship("Fund") >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> class Title(Base): >> >> >> >> >> >>>> >> >> __tablename__ = 'title' >> >> >> >> >> >>>> >> >> id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> >> >> department_id = >> >> >> >> >> >>>> >> >> Column(ForeignKey('department.id'), nullable=False) >> >> >> >> >> >>>> >> >> department = relationship("Department") >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> class Department(Base): >> >> >> >> >> >>>> >> >> __tablename__ = 'department' >> >> >> >> >> >>>> >> >> id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> class Fund(Base): >> >> >> >> >> >>>> >> >> __tablename__ = 'fund' >> >> >> >> >> >>>> >> >> id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> >> >> title_id = Column(ForeignKey('title.id'), >> >> >> >> >> >>>> >> >> nullable=False) >> >> >> >> >> >>>> >> >> department_id = >> >> >> >> >> >>>> >> >> Column(ForeignKey('department.id'), nullable=False) >> >> >> >> >> >>>> >> >> department = relationship("Department") >> >> >> >> >> >>>> >> >> title = relationship("Title") >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> class FundTitle(Base): >> >> >> >> >> >>>> >> >> __tablename__ = 'fund_title' >> >> >> >> >> >>>> >> >> id = Column(Integer, primary_key=True) >> >> >> >> >> >>>> >> >> title_id = Column(ForeignKey('title.id'), >> >> >> >> >> >>>> >> >> nullable=False) >> >> >> >> >> >>>> >> >> department_id = >> >> >> >> >> >>>> >> >> Column(ForeignKey('department.id'), nullable=False) >> >> >> >> >> >>>> >> >> fund_id = Column(ForeignKey('fund.id'), >> >> >> >> >> >>>> >> >> nullable=False) >> >> >> >> >> >>>> >> >> department = relationship("Department") >> >> >> >> >> >>>> >> >> title = relationship("Title") >> >> >> >> >> >>>> >> >> fund = relationship("Fund") >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> e = >> >> >> >> >> >>>> >> >> create_engine("postgresql://scott:tiger@localhost/test", >> >> >> >> >> >>>> >> >> echo=True) >> >> >> >> >> >>>> >> >> Base.metadata.create_all(e) >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> s = Session(e) >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> d1 = Department() >> >> >> >> >> >>>> >> >> t1 = Title(department=d1) >> >> >> >> >> >>>> >> >> f1 = Fund(department=d1, title=t1) >> >> >> >> >> >>>> >> >> ft1 = FundTitle(title=t1, department=d1, fund=f1) >> >> >> >> >> >>>> >> >> e1 = Employee(title=t1, department=d1, fund=f1) >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> s.add_all([d1, t1, f1, ft1, e1]) >> >> >> >> >> >>>> >> >> s.commit() >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> the INSERTs can be ordered naturally here and the >> >> >> >> >> >>>> >> >> unit of work will do >> >> >> >> >> >>>> >> >> that for you if you use relationship: >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> BEGIN (implicit) >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,750 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine INSERT INTO >> >> >> >> >> >>>> >> >> department DEFAULT VALUES RETURNING department.id >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,750 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine {} >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,753 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine INSERT INTO >> >> >> >> >> >>>> >> >> title (department_id) VALUES (%(department_id)s) >> >> >> >> >> >>>> >> >> RETURNING title.id >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,753 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine {'department_id': 1} >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,757 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine INSERT INTO >> >> >> >> >> >>>> >> >> fund (title_id, department_id) VALUES (%(title_id)s, >> >> >> >> >> >>>> >> >> %(department_id)s) RETURNING fund.id >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,757 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine >> >> >> >> >> >>>> >> >> {'title_id': 1, 'department_id': 1} >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,760 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine INSERT INTO >> >> >> >> >> >>>> >> >> employee (title_id, department_id, fund_id) VALUES >> >> >> >> >> >>>> >> >> (%(title_id)s, >> >> >> >> >> >>>> >> >> %(department_id)s, %(fund_id)s) RETURNING employee.id >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,761 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine >> >> >> >> >> >>>> >> >> {'title_id': 1, 'department_id': 1, 'fund_id': 1} >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,763 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine INSERT INTO >> >> >> >> >> >>>> >> >> fund_title (title_id, department_id, fund_id) VALUES >> >> >> >> >> >>>> >> >> (%(title_id)s, >> >> >> >> >> >>>> >> >> %(department_id)s, %(fund_id)s) RETURNING >> >> >> >> >> >>>> >> >> fund_title.id >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,764 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine >> >> >> >> >> >>>> >> >> {'title_id': 1, 'department_id': 1, 'fund_id': 1} >> >> >> >> >> >>>> >> >> 2018-10-08 10:18:38,766 INFO >> >> >> >> >> >>>> >> >> sqlalchemy.engine.base.Engine COMMIT >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >>>> >> >> > >> >> >> >> >> >>>> >> >> > On Tuesday, September 18, 2018 at 9:02:30 AM UTC-4, >> >> >> >> >> >>>> >> >> > Mike Bayer wrote: >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> if there are no dependencies between two >> >> >> >> >> >>>> >> >> >> particular objects of >> >> >> >> >> >>>> >> >> >> different classes, say A and B, then there is no >> >> >> >> >> >>>> >> >> >> deterministic >> >> >> >> >> >>>> >> >> >> ordering between them. For objects of the same >> >> >> >> >> >>>> >> >> >> class, they are >> >> >> >> >> >>>> >> >> >> inserted in the order in which they were added to >> >> >> >> >> >>>> >> >> >> the Session. >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> the correct way to solve this problem in >> >> >> >> >> >>>> >> >> >> SQLAlchemy is to use >> >> >> >> >> >>>> >> >> >> relationship() fully. I know you've stated that >> >> >> >> >> >>>> >> >> >> these objects have a >> >> >> >> >> >>>> >> >> >> relationship() between them but you have to >> >> >> >> >> >>>> >> >> >> actually use it, that is: >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> obj_a = A() >> >> >> >> >> >>>> >> >> >> obj_b = B() >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> obj_a.some_relationship = obj_b # will >> >> >> >> >> >>>> >> >> >> definitely flush correctly >> >> >> >> >> >>>> >> >> >> unless there is a bug >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> OTOH if you are only using foreign key attributes, >> >> >> >> >> >>>> >> >> >> the ORM does *not* >> >> >> >> >> >>>> >> >> >> have any idea in how it should be flushing these: >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> obj_a = A() >> >> >> >> >> >>>> >> >> >> obj_b = B() >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> obj_a.some_fk = obj_b.some_id # ORM doesn't >> >> >> >> >> >>>> >> >> >> care about this, no >> >> >> >> >> >>>> >> >> >> ordering is implied >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> since you said you're not setting any IDs, I'm not >> >> >> >> >> >>>> >> >> >> sure how you could >> >> >> >> >> >>>> >> >> >> be doing the above. >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> >> >> >> >> >> >>>> >> >> >> On Tue, Sep 18, 2018 at 5:53 AM Simon King >> >> >> >> >> >>>> >> >> >> <[email protected]> wrote: >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >>>> >> >> >> > It's not something I've ever looked into, but >> >> >> >> >> >>>> >> >> >> > I'm not aware of any >> >> >> >> >> >>>> >> >> >> > debugging options here, no. You'd probably want >> >> >> >> >> >>>> >> >> >> > to start by scattering >> >> >> >> >> >>>> >> >> >> > print statements around the UOWTransaction class >> >> >> >> >> >>>> >> >> >> > (https://bitbucket.org/zzzeek/sqlalchemy/src/c94d67892e68ac317d72eb202cca427084b3ca74/lib/sqlalchemy/orm/unitofwork.py?at=master&fileviewer=file-view-default#unitofwork.py-111) >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >>>> >> >> >> > Looking at that code made me wonder whether >> >> >> >> >> >>>> >> >> >> > you've set any particular >> >> >> >> >> >>>> >> >> >> > cascade options on your relationship; I'm not >> >> >> >> >> >>>> >> >> >> > sure if cascade options >> >> >> >> >> >>>> >> >> >> > affect the dependency calculation. >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >>>> >> >> >> > Simon >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >>>> >> >> >> > On Tue, Sep 18, 2018 at 5:28 AM Alex Rothberg >> >> >> >> >> >>>> >> >> >> > <[email protected]> wrote: >> >> >> >> >> >>>> >> >> >> > > >> >> >> >> >> >>>> >> >> >> > > In order to guide me in stripping down this >> >> >> >> >> >>>> >> >> >> > > code to produce an example for positing, are >> >> >> >> >> >>>> >> >> >> > > there any options / flags / introspections I >> >> >> >> >> >>>> >> >> >> > > can turn on to understand how sql makes >> >> >> >> >> >>>> >> >> >> > > decisions about the order in which is writes >> >> >> >> >> >>>> >> >> >> > > statements to the DB? >> >> >> >> >> >>>> >> >> >> > > >> >> >> >> >> >>>> >> >> >> > > On Friday, September 14, 2018 at 10:13:45 AM >> >> >> >> >> >>>> >> >> >> > > UTC-4, Simon King wrote: >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >> >>>> >> >> >> > >> In that case can you show us the code that is >> >> >> >> >> >>>> >> >> >> > >> causing the problem? >> >> >> >> >> >>>> >> >> >> > >> On Fri, Sep 14, 2018 at 2:55 PM Alex Rothberg >> >> >> >> >> >>>> >> >> >> > >> <[email protected]> wrote: >> >> >> >> >> >>>> >> >> >> > >> > >> >> >> >> >> >>>> >> >> >> > >> > I am not generating any IDs myself and I >> >> >> >> >> >>>> >> >> >> > >> > already have relationships between the >> >> >> >> >> >>>> >> >> >> > >> > models. >> >> >> >> >> >>>> >> >> >> > >> > >> >> >> >> >> >>>> >> >> >> > >> > On Friday, September 14, 2018 at 4:33:08 AM >> >> >> >> >> >>>> >> >> >> > >> > UTC-4, Simon King wrote: >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >> >> >>>> >> >> >> > >> >> On Thu, Sep 13, 2018 at 10:50 PM Alex >> >> >> >> >> >>>> >> >> >> > >> >> Rothberg <[email protected]> wrote: >> >> >> >> >> >>>> >> >> >> > >> >> > >> >> >> >> >> >>>> >> >> >> > >> >> > Is it possible to hint at sqla the order >> >> >> >> >> >>>> >> >> >> > >> >> > in which it should write out changes to >> >> >> >> >> >>>> >> >> >> > >> >> > the DB? >> >> >> >> >> >>>> >> >> >> > >> >> > >> >> >> >> >> >>>> >> >> >> > >> >> > I am having issues in which I add two >> >> >> >> >> >>>> >> >> >> > >> >> > new objects to a session, a and b where >> >> >> >> >> >>>> >> >> >> > >> >> > a depends on b, but sqla is flushing a >> >> >> >> >> >>>> >> >> >> > >> >> > before b leading to an fk issue. I can >> >> >> >> >> >>>> >> >> >> > >> >> > solve this a few ways: explicitly >> >> >> >> >> >>>> >> >> >> > >> >> > calling flush after adding b, or >> >> >> >> >> >>>> >> >> >> > >> >> > changing the fk constraint to be >> >> >> >> >> >>>> >> >> >> > >> >> > initially deferred. Ideally I would not >> >> >> >> >> >>>> >> >> >> > >> >> > have to do either of these. >> >> >> >> >> >>>> >> >> >> > >> >> > >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >> >> >>>> >> >> >> > >> >> If you have configured a relationship >> >> >> >> >> >>>> >> >> >> > >> >> between the two classes >> >> >> >> >> >>>> >> >> >> > >> >> (http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#building-a-relationship), >> >> >> >> >> >>>> >> >> >> > >> >> and you've linked the objects together >> >> >> >> >> >>>> >> >> >> > >> >> using that relationship (a.b = >> >> >> >> >> >>>> >> >> >> > >> >> b), then SQLAlchemy will flush them in the >> >> >> >> >> >>>> >> >> >> > >> >> correct order. If you are >> >> >> >> >> >>>> >> >> >> > >> >> generating your IDs in Python and >> >> >> >> >> >>>> >> >> >> > >> >> assigning them to the primary and >> >> >> >> >> >>>> >> >> >> > >> >> foreign key columns directly, SQLAlchemy >> >> >> >> >> >>>> >> >> >> > >> >> probably won't understand the >> >> >> >> >> >>>> >> >> >> > >> >> dependency. >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >> >> >>>> >> >> >> > >> >> Does using a relationship fix your problem? >> >> >> >> >> >>>> >> >> >> > >> >> >> >> >> >> >> >>>> >> >> >> > >> >> Simon >> >> >> >> >> >>>> >> >> >> > >> > >> >> >> >> >> >>>> >> >> >> > >> > -- >> >> >> >> >> >>>> >> >> >> > >> > 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 >> >> >> >> >> >>>> >> >> >> > >> > [email protected]. >> >> >> >> >> >>>> >> >> >> > >> > To post to this group, send email to >> >> >> >> >> >>>> >> >> >> > >> > [email protected]. >> >> >> >> >> >>>> >> >> >> > >> > Visit this group at >> >> >> >> >> >>>> >> >> >> > >> > https://groups.google.com/group/sqlalchemy. >> >> >> >> >> >>>> >> >> >> > >> > For more options, visit >> >> >> >> >> >>>> >> >> >> > >> > 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 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 >> >> >> >> >> >>>> >> >> >> > > [email protected]. >> >> >> >> >> >>>> >> >> >> > > To post to this group, send email to >> >> >> >> >> >>>> >> >> >> > > [email protected]. >> >> >> >> >> >>>> >> >> >> > > Visit this group at >> >> >> >> >> >>>> >> >> >> > > https://groups.google.com/group/sqlalchemy. >> >> >> >> >> >>>> >> >> >> > > For more options, visit >> >> >> >> >> >>>> >> >> >> > > 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 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 >> >> >> >> >> >>>> >> >> >> > [email protected]. >> >> >> >> >> >>>> >> >> >> > To post to this group, send email to >> >> >> >> >> >>>> >> >> >> > [email protected]. >> >> >> >> >> >>>> >> >> >> > Visit this group at >> >> >> >> >> >>>> >> >> >> > https://groups.google.com/group/sqlalchemy. >> >> >> >> >> >>>> >> >> >> > For more options, visit >> >> >> >> >> >>>> >> >> >> > 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 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 >> >> >> >> >> >>>> >> >> > [email protected]. >> >> >> >> >> >>>> >> >> > To post to this group, send email to >> >> >> >> >> >>>> >> >> > [email protected]. >> >> >> >> >> >>>> >> >> > Visit this group at >> >> >> >> >> >>>> >> >> > https://groups.google.com/group/sqlalchemy. >> >> >> >> >> >>>> >> >> > For more options, visit >> >> >> >> >> >>>> >> >> > 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 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/fZMJQoI2qkY/unsubscribe. >> >> >> >> >> >>>> >> >> To unsubscribe from this group and all its topics, >> >> >> >> >> >>>> >> >> send an email to [email protected]. >> >> >> >> >> >>>> >> >> To post to this group, send email to >> >> >> >> >> >>>> >> >> [email protected]. >> >> >> >> >> >>>> >> >> Visit this group at >> >> >> >> >> >>>> >> >> https://groups.google.com/group/sqlalchemy. >> >> >> >> >> >>>> >> >> For more options, visit >> >> >> >> >> >>>> >> >> 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 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 >> >> >> >> >> >>>> >> > [email protected]. >> >> >> >> >> >>>> >> > To post to this group, send email to >> >> >> >> >> >>>> >> > [email protected]. >> >> >> >> >> >>>> >> > Visit this group at >> >> >> >> >> >>>> >> > https://groups.google.com/group/sqlalchemy. >> >> >> >> >> >>>> >> > For more options, visit >> >> >> >> >> >>>> >> > 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 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 [email protected]. >> >> >> >> >> >>>> > To post to this group, send email to >> >> >> >> >> >>>> > [email protected]. >> >> >> >> >> >>>> > Visit this group at >> >> >> >> >> >>>> > https://groups.google.com/group/sqlalchemy. >> >> >> >> >> >>>> > For more options, visit >> >> >> >> >> >>>> > 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 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 [email protected]. >> >> >> >> >> > To post to this group, send email to [email protected]. >> >> >> >> >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> >> >> >> >> > For more options, visit 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 >> >> >> >> > 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 [email protected]. >> >> >> >> > To post to this group, send email to [email protected]. >> >> >> >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> >> >> >> > For more options, visit 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 >> >> >> >> 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/fZMJQoI2qkY/unsubscribe. >> >> >> >> To unsubscribe from this group and all its topics, send an email to >> >> >> >> [email protected]. >> >> >> >> To post to this group, send email to [email protected]. >> >> >> >> Visit this group at https://groups.google.com/group/sqlalchemy. >> >> >> >> For more options, visit 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 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 [email protected]. >> >> >> > To post to this group, send email to [email protected]. >> >> >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> >> >> > For more options, visit 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 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/fZMJQoI2qkY/unsubscribe. >> >> >> To unsubscribe from this group and all its topics, send an email to >> >> >> [email protected]. >> >> >> To post to this group, send email to [email protected]. >> >> >> Visit this group at https://groups.google.com/group/sqlalchemy. >> >> >> For more options, visit 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 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 [email protected]. >> >> > To post to this group, send email to [email protected]. >> >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> >> > For more options, visit 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 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 [email protected]. >> > To post to this group, send email to [email protected]. >> > Visit this group at https://groups.google.com/group/sqlalchemy. >> > For more options, visit 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 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 [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit 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 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
