On Sep 9, 2014, at 4:45 PM, pyArchInit ArcheoImagineers <pyarchi...@gmail.com> 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 <mand...@gmail.com> 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 sqlalchemy+...@googlegroups.com. >> To post to this group, send email to sqlal...@googlegroups.com. >> 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 sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > 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 sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.