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 <[email protected]> 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="[email protected]", 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="[email protected]", 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 [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to