I have an automatically generated query that occasionally generates a
huge number of parameters (50,000+). Sometimes Sqlalchemy does not
correctly serialise the parameters. If I have 50,000 parameters often
one is incorrect, for 100,000 parameters usually 3 are incorrect. More
parameters seems to correlate with a higher chance of a problem
occurring.

Code to reproduce:

from sqlalchemy import create_engine, Column, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql import text

PARAMETERS = 100000

Base = declarative_base()
class Value(Base):
    __tablename__ = 'value'

    id = Column(Integer, primary_key=True)
    value = Column(Integer, unique=True)

db_engine = create_engine('sqlite:///?', echo=True)
Base.metadata.create_all(db_engine)

Session = sessionmaker(db_engine)
session = Session()

print 'Seeding database with %d values' % PARAMETERS
for i in range(PARAMETERS):
    session.add(Value(value=i))
session.commit()

params = {}
in_clause = []
for i in range(PARAMETERS):
    params['in%d' % i] = i
    in_clause.append(':in%d' % i)

sql = 'select value from value where value in (%s)' % ', '.join
(in_clause)
print 'Querying'
print sql
results = session.execute(text(sql), params=params).fetchall()

expected = set(range(PARAMETERS))
got = set((row[0] for row in results))

missing = expected - got
if missing:
    print 'Missing values %s' % missing
    r = dict(((v, k) for k, v in params.iteritems()))
    for i in missing:
        print '%s was parameter %s' % (i, r[i])


When run the output contains:
Missing values set([97490, 28181, 29654])
97490 was parameter in97490
28181 was parameter in28181
29654 was parameter in29654

Looking through the output I see that 97490 was in my query. The
output from for Sqlalchemy for the query parameters however contains
this:
..., 97488, 97489, 93435, 97491, 97492, ...

My test machine is a MacPro running SQLAlchemy 0.5.4p2 on python 2.5.
I have observed this issue with  both sqlite and mysql backends

Cheers,
Jon.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@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
-~----------~----~----~----~------~----~------~--~---

Reply via email to