Not sure what you mean, as I've seen hybrid setups before. In any case, thanks for helping me narrow this down. I need to decide whether I'll need real transactions here. Despite being an oversight on my part, do you think perhaps the docs for rollback / commit should mention DB support ? I did look at them before writing to the list, and it still didn't dawn on me.
On Jan 10, 1:19 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > yah MySQL doesn't really operate with a mixture. > > On Jan 10, 2011, at 4:13 PM, Romy wrote: > > > > > > > > > Face palm.. missed the forest for the trees. > > > Does this mean both tables would need to be InnoDB ? > > > On Jan 10, 7:10 am, Michael Bayer <mike...@zzzcomputing.com> wrote: > >> One important change here is to change the engine type to InnoDB, > >> otherwise transactions are entirely meaningless with MySQL. > > >> If I use InnoDB, the end result of "used" is 0 in all cases. If I don't > >> and use MyISAM, the end result of "used" is 1 in all cases, regardless of > >> whether InviteCode is loaded before, or after, the begin(). > > >> It seems likely that the issue is simply that you forgot to use InnoDB. > > >> On Jan 10, 2011, at 1:43 AM, Romy wrote: > > >>> Sorry Michael, 'self-contained' wasn't a proper term for that test > >>> given that it required an initial DB state containing a single row. > >>> I've modified your version to try and reproduce the bug. > > >>> Since yours didn't use elixir at all and I'm not familiar with > >>> elixir's internals, I was able to reproduce only what I believe to be > >>> the equivalent in sqlalchemy. Please note you'll need to create a > >>> mysql database and fill in the connection string, as the test does not > >>> fail with sqlite! > > >>> from sqlalchemy import * > >>> from sqlalchemy.orm import * > >>> from sqlalchemy.ext.declarative import declarative_base > > >>> e = create_engine('mysql://user:p...@localhost/test', echo=True) > > >>> Base = declarative_base() > > >>> class InviteCode(Base): > >>> __tablename__ = 'test_invite_codes' > >>> id = Column(Integer, primary_key=True) > >>> used = Column(Integer, default=0) > >>> users = relationship("User", backref="invite_code") > > >>> class User(Base): > >>> __tablename__ = 'test_users' > >>> id = Column(Integer, primary_key=True) > >>> invite_code_id = Column(Integer, > >>> ForeignKey('test_invite_codes.id')) > >>> email = Column(String(128), unique=True) > > >>> Base.metadata.create_all(e) > >>> session = Session(e, autocommit=True) > > >>> session.query(User).delete() > >>> session.query(InviteCode).delete() > > >>> invite_code = InviteCode() > >>> session.add(invite_code) > >>> session.flush() > > >>> assert invite_code.used == 0 > > >>> session.close() > > >>> session.begin() > >>> user_row = User(email="n...@unique.com", invite_code_id=None) > >>> session.add(user_row) > >>> session.commit() > > >>> invite_code = session.query(InviteCode).first() > >>> assert invite_code.used == 0 > > >>> session.begin() > >>> invite_code.used = invite_code.used + 1 > >>> session.add(invite_code) > >>> session.flush() > >>> user_row_2 = User(email="n...@unique.com", invite_code_id=None) > >>> session.add(user_row_2) > > >>> rolled_back = False > > >>> try: > >>> session.commit() > >>> except: > >>> rolled_back = True > >>> session.rollback() > > >>> assert rolled_back > >>> assert invite_code.used == 0 > > >>> -- > >>> You received this message because you are subscribed to the Google Groups > >>> "sqlalchemy" group. > >>> To post to this group, send email to sqlalch...@googlegroups.com. > >>> To unsubscribe from this group, send email to > >>> sqlalchemy+unsubscr...@googlegroups.com. > >>> For more options, visit this group > >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "sqlalchemy" group. > > To post to this group, send email to sqlalch...@googlegroups.com. > > To unsubscribe from this group, send email to > > sqlalchemy+unsubscr...@googlegroups.com. > > For more options, visit this group > > athttp://groups.google.com/group/sqlalchemy?hl=en. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.