On Sep 9, 2014, at 4:45 PM, pyArchInit ArcheoImagineers <[email protected]>
wrote:
> Hi Michael and thanks a lot.
>
>
> Il giorno venerdì 5 settembre 2014 18:23:31 UTC+2, Michael Bayer ha scritto:
> you batch out the values to be used in the IN, then one of two choices: my
> preference is to run separate SELECT statements, using IN with each batch.
> If you really can't do that, you can combine the batches of IN groups with an
> OR: "x IN (batch1) OR x IN (batch2) ..."
>
>
>
>
> O spent 2 day to find a solutions:
> I make write to python this string:
>
> cmd_str = "session.query(MAPPCLASS).filter(or_(MAPPCLASS.id_invmat.in_([1, 2,
> 3, 4])).(MAPPCLASS.id_invmat.in_([5, 6, 7,
> 8]))).order_by(asc(MAPPCLASS.id_invmat)).all()"
>
> But I receive this error..
>
> Neither 'BinaryExpression' object nor 'Comparator' object has an attribute
> 'or_'
there's be somewhere you're calling <something>.or_(), which is incorrect,
or_() is standalone.
not sure what "cmd_str" is about, you can just do this directly:
args = [<lots of args>]
or_args = []
while args:
chunk = args[0:1000]
or_args.append(MAPCLASS.id.in_(chunk))
session.query(MAPCLASS).filter(or_(*or_args))
>
> mmmm .... a little suggestion to the right sintax to pass to the eval?
>
>
> keep in mind when you send enormous strings to your database, that places a
> burden on the query system. Oracle (which I assume you're using) also caches
> these queries
>
>
> I'm using sqlite DB.
>
> Best regards and thanks a lot.
> Luca
>
>
>
>
>
> On Sep 5, 2014, at 2:30 AM, mando <[email protected]> wrote:
>
>> Hi to all,
>>
>> I wrote a method like this to reuse the code for many tables at the same
>> time[0]
>>
>> But, with more than 1000 records sqlite doesn't accepts the amount of id
>> inside .in_(id_list)
>>
>> How can I filter, split or can manage it?
>>
>> Thanks a lot and best regards,
>> Luca
>>
>>
>> [0]
>> def query_sort(self,id_list, op, to, tc, idn):
>> self.order_params = op #sorting parameters
>> self.type_order = to #asc or desc
>> self.table_class = tc #the name of the mapper class
>> self.id_name = idn #the name of the id
>>
>> filter_params = self.type_order + "(" + self.table_class + "."
>> + self.order_params[0] + ")"
>> for i in self.order_params[1:]:
>> filter_temp = self.type_order + "(" + self.table_class
>> + "." + i + ")"
>>
>> filter_params += ", "+ filter_temp
>>
>> Session = sessionmaker(bind=self.engine, autoflush=True,
>> autocommit=True)
>> session = Session()
>>
>> cmd_str = "session.query(" + self.table_class + ").filter(" +
>> self.table_class + "." + self.id_name + ".in_(id_list)).order_by(" +
>> filter_params + ").all()"
>>
>> return eval(cmd_str)
>>
>> --
>> 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.
>> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> 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.
> For more options, visit https://groups.google.com/d/optout.
--
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.
For more options, visit https://groups.google.com/d/optout.