Not yet, I'm still recovering from the first one :-).
On Nov 20, 10:50 pm, Michael Bayer <[EMAIL PROTECTED]> wrote:
> very nice - this fix is applied in r5314. It's not every day someone
> gives us a patch for strategies.py...have any more ? :)
>
> On Nov 20, 2008, at 9:47 PM, Yoann Roman wrote:
>
>
>
> > I'm getting invalid SQL when I try to filter for records that have no
> > matching related record in a one-to-one relationship using the not_
> > function. For example, with address being a relation from User:
>
> >>>> print User.id==None
> > users.id IS NULL
> >>>> print not_(User.id==None)
> > users.id IS NOT NULL
> >>>> print User.address==None
> > users.address_id IS NULL
> >>>> print not_(User.address==None)
> > users.address_id != NULL
>
> > The last expression fails to return the correct records against MySQL.
> > Below is a complete test script to reproduce the above output:
>
> > from sqlalchemy import create_engine, Table, Column, Integer, String,
> > Text, \
> > MetaData, ForeignKeyConstraint, not_
> > from sqlalchemy.orm import mapper, relation, sessionmaker
>
> > # initialize the engine
> > engine = create_engine('sqlite:///:memory:', echo=False)
> > metadata = MetaData()
>
> > # setup the users table
> > users = Table('users', metadata,
> > Column('id', Integer, primary_key=True),
> > Column('name', String(50)),
> > Column('address_id', Integer),
> > ForeignKeyConstraint(['address_id'], ['addresses.id'])
> > )
>
> > # setup the addresses table
> > addresses = Table('addresses', metadata,
> > Column('id', Integer, primary_key=True),
> > Column('address', Text),
> > )
>
> > # create the tables
> > metadata.create_all(engine)
>
> > # define the User class
> > class User(object):
> > def __repr__(self):
> > return '<User "%s">' % self.name
>
> > # define the Address class
> > class Address(object):
> > def __repr__(self):
> > return '<Address "%s">' % self.address
>
> > # setup the mapping
> > mapper(Address, addresses)
> > mapper(User, users, properties={
> > 'address': relation(Address, backref='user')
> > })
>
> > # create the session
> > Session = sessionmaker(bind=engine)
>
> > # perform the tests
> > print User.id==None
> > print not_(User.id==None)
> > print User.address==None
> > print not_(User.address==None)
>
> > A possible fix seems to be to add "binary.negate = operators.isnot"
> > below lines 394 and 397 of orm/strategies.py
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---