OK if positive numbers do it too, then that's not the issue.

Here is an example script illustrating how session.query(X).get(num) will not 
emit subsequent SQL if the object is strongly referenced already, in this case 
it drops the test table to prove it's point, but SQL echoing could be used as 
well.  Try it on your system and see if you can modify it to reproduce your 
results.

from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class A(Base):
    __tablename__ = 'a'

    id = Column(Integer, primary_key=True)

e = create_engine("sqlite://", echo=True)
Base.metadata.create_all(e)

sess = Session(e)
sess.add(A(id=1))
sess.commit()
sess.close()

# this line fails to hold onto "a1",
# subsequent queries fail
# sess.query(A).get(1)

# this line holds on, there's no issue
a1 = sess.query(A).get(1)

sess.execute("drop table a")

a2 = sess.query(A).get(1)
a3 = sess.query(A).get(1)

assert a1 is a2 is a3





On May 21, 2013, at 3:38 PM, Etienne Rouxel <[email protected]> wrote:

> @Michael Bayer:
> The database type used is "integer" with a range from -2147483648 to 
> +2147483647 according to the documentation 
> (http://www.postgresql.org/docs/8.4/interactive/datatype-numeric.html).
> I just started at the beginning of the range, that is why I have negative 
> numbers.
> I performed all the tests mentioned earlier by using positive numbers and I 
> have the same results.
> 
> When you say that it is seems a bit suspect, are you talking about my problem 
> in particular or about using negative number in general?
> 
> 
> Le mardi 21 mai 2013 17:31:10 UTC+2, Etienne Rouxel a écrit :
> Hello
> In my program, I was trying to guess why so many SQL queries were sent while 
> some could have been avoided with the help of the identity map.
> So, I reduced my program to what is below and wrote 3 times the same 
> query.get call and 3 SQL queries were sent to the database server.
> Why does SQLAlchemy send 3 times the SQL while it could have done it only 1 
> time for the first call and use the identity map for the 2 last calls?
> 
> from sqlalchemy import *
> from sqlalchemy.orm import *
> from sqlalchemy.ext.declarative import declarative_base
> Base = declarative_base()
> 
> _descriptiontype_table = Table('descriptiontype', Base.metadata,
>         Column('id', Integer, primary_key=True),
>         Column('refno', Integer),
>         Column('sortindex', Integer),
>         Column('designation', String),
>         schema='botany'
>     )
> 
> class Descriptiontype(Base):
>     __table__ = _descriptiontype_table
> 
> if __name__ == '__main__':
> 
>     engine = create_engine('postgresql://user@localhost:5432/mydatabase')
>     Session = sessionmaker(bind=engine)
>     session = Session()
> 
>     session.query(Descriptiontype).get(-2147483648)
>     session.query(Descriptiontype).get(-2147483648)
>     session.query(Descriptiontype).get(-2147483648)
> 
> 
> -- 
> 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 http://groups.google.com/group/sqlalchemy?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  

-- 
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 http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to