[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
yeah its a bug, its all fixed (several issues with text columns) in 2368. --~--~-~--~~~---~--~~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~--~~~~--~~--~--~---
[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
Thanks! On Mar 1, 1:31 pm, Michael Bayer [EMAIL PROTECTED] wrote: yeah its a bug, its all fixed (several issues with text columns) in 2368. --~--~-~--~~~---~--~~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~--~~~~--~~--~--~---
[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
yeah its a bug, its all fixed (several issues with text columns) in 2368. On Feb 28, 2007, at 4:46 PM, Dennis wrote: On Feb 28, 12:30 pm, Michael Bayer [EMAIL PROTECTED] wrote: you have to show me what youre doing since from my understanding, youre using literal text, and nothing should get added to that. Here is a quicky Test: from sqlalchemy import * e=create_engine('sqlite://memory') ts=Table('ts',e, Column ( 'id',Integer,primary_key=True), Column ( 'dat',Integer,nullable=False)) ts.create() sel=select( [ case when id 5 then 'ok' else 'tolow' end as test ] , from_obj=[ts], use_labels=True ) print str(sel) ___ And here is the output I get: SELECT case when id 5 then 'ok' else 'tolow' end as test AS casewhenid5thenokelsetolowendastest FROM t Am I doing something wrong with the literal text block? Is there another way to specify one besides simply passing in a string. Thanks Dennis --~--~-~--~~~---~--~~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~--~~~~--~~--~--~---
[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
That's the problem, if I have use_labels=True, and I include as somecolumn in the text clause, I still get a generated label. The resulting sql = . as somecolumn as somelonglabelthatisashortenedversionofthetext. that creates an sql error. On Feb 27, 3:51 pm, Michael Bayer [EMAIL PROTECTED] wrote: yeah with text just say as sometable_somecolumn. On Feb 27, 2007, at 4:16 PM, Dennis wrote: Well, columnname isn't a simple column in the case of a case statement... the label is turning out like this: casewhenhas_testtrueandscoreisnullandgender1then1whenscoreisnullthen2 elsescoreend I haven't found a way to manually assign a label to a text clause yet, but before I tried use_labels=True, I has appended as score to the case clause and that worked. On Feb 27, 2:44 pm, Michael Bayer [EMAIL PROTECTED] wrote: the label is always tablename_columnname. youd have to show me where you need that to be programmatic. On Feb 27, 2007, at 2:29 PM, Dennis wrote: Thanks for taking a peek. Interesting, it does indeed fix the issue to use labels. Now I have another issue though, I have a case statement in my select which I was specifying like this: select ( ['case when yada yada yada end as something' ] .. If use_labels = True, then the query breaks because the generated sql has two as label parts two it. if I delete the as something part, I think don't know programatically what the label is though. I need to know that because I order by it. Isn't there a way to find out a column label from a query? -Dennis On Feb 27, 12:47 pm, Michael Bayer [EMAIL PROTECTED] wrote: if you run it with full blown logging on, i.e.: import logging logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG) logging.getLogger('sqlalchemy.orm').setLevel(logging.DEBUG) the issue can be detected when you look at the mapper creating instance keys for T (although this is clearly not a novice issue): DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (1,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (3,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (5,), None) not in session[] so its not getting an identity key for every other row, which indicates its looking at the wrong column in the result set. (on each of those Nones, its going to skip that entity) looking at the query: SELECT ts.id, ts.dat, other.ts_id, other.other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id we can see that other has a column called ts_id, which looks exactly like the label that would be made for id in table ts. so thats whats happening here. so throwing on a use_labels=True to the query (or changing the name of ts_id) produces the query: SELECT ts.id AS ts_id, ts.dat AS ts_dat, other.ts_id AS other_ts_id, other.other_dat AS other_other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id that gives the correct results. not sure what SA can really do here to make this kind of issue easier to catch, since the resultproxy itself is where its looking for col label, col name, , etc. the generated labels are generally more accurate. i tried playing around with ResultProxy to make it detect an ambiguity of this nature, but i think it might not be possible unless more flags/switches get passed from the statement to the result (which id rather not do since it further marginalizes straight textual queries), since if the select statement uses table/col labels for each column, there still could be conflicts which dont matter, such as the column names the normal eager loader generates: 'ts_id', 'ts_dat', 'other_4966_ts_id', 'other_4966_other_dat', that result is from column ts_id attached to an Alias other_4966. if we said dont allow any Column to be found twice in the row, then that breaks (since it will match other_4966_ts_id on its _label, ts_id on its name). On Feb 27, 2007, at 12:09 PM, Dennis Muhlestein wrote: from sqlalchemy import * e=create_engine('sqlite://memory') ts=Table('ts',e, Column ( 'id',Integer,primary_key=True), Column ( 'dat',Integer,nullable=False)) ts.create() to_oneornone=Table('other',e, Column ( 'ts_id', Integer,ForeignKey('ts.id'), primary_key=True, nullable=False ), Column ( 'other_dat', Integer, nullable=False ) ) to_oneornone.create() class T(object): pass T.mapper=mapper(T,ts) class To(object):pass
[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
if you run it with full blown logging on, i.e.: import logging logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG) logging.getLogger('sqlalchemy.orm').setLevel(logging.DEBUG) the issue can be detected when you look at the mapper creating instance keys for T (although this is clearly not a novice issue): DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (1,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (3,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (5,), None) not in session[] so its not getting an identity key for every other row, which indicates its looking at the wrong column in the result set. (on each of those Nones, its going to skip that entity) looking at the query: SELECT ts.id, ts.dat, other.ts_id, other.other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id we can see that other has a column called ts_id, which looks exactly like the label that would be made for id in table ts. so thats whats happening here. so throwing on a use_labels=True to the query (or changing the name of ts_id) produces the query: SELECT ts.id AS ts_id, ts.dat AS ts_dat, other.ts_id AS other_ts_id, other.other_dat AS other_other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id that gives the correct results. not sure what SA can really do here to make this kind of issue easier to catch, since the resultproxy itself is where its looking for col label, col name, , etc. the generated labels are generally more accurate. i tried playing around with ResultProxy to make it detect an ambiguity of this nature, but i think it might not be possible unless more flags/switches get passed from the statement to the result (which id rather not do since it further marginalizes straight textual queries), since if the select statement uses table/col labels for each column, there still could be conflicts which dont matter, such as the column names the normal eager loader generates: 'ts_id', 'ts_dat', 'other_4966_ts_id', 'other_4966_other_dat', that result is from column ts_id attached to an Alias other_4966. if we said dont allow any Column to be found twice in the row, then that breaks (since it will match other_4966_ts_id on its _label, ts_id on its name). On Feb 27, 2007, at 12:09 PM, Dennis Muhlestein wrote: from sqlalchemy import * e=create_engine('sqlite://memory') ts=Table('ts',e, Column ( 'id',Integer,primary_key=True), Column ( 'dat',Integer,nullable=False)) ts.create() to_oneornone=Table('other',e, Column ( 'ts_id', Integer,ForeignKey('ts.id'), primary_key=True, nullable=False ), Column ( 'other_dat', Integer, nullable=False ) ) to_oneornone.create() class T(object): pass T.mapper=mapper(T,ts) class To(object):pass To.mapper=mapper(To,to_oneornone,properties={'ts':relation (T,backref=backref('other',uselist=False))}) s=create_session() for x in range(10): t=T() t.dat=x s.save(t) if x % 2 == 0: # test every other T has an optional data o=To() o.other_dat=x t.other=o s.save(t) s.flush() s.clear() somedata=s.query(T).options(eagerload('other')).select() print 'Number results should be 10: ', len(somedata) s.clear() sel=select([ts,to_oneornone], from_obj=[ts.outerjoin(to_oneornone)]) print Raw select also is 10: , len(sel.execute().fetchall() ) print Instances should also be 10: , len(s.query(T).options (contains_eager('other')).instances(sel.execute())) --~--~-~--~~~---~--~~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~--~~~~--~~--~--~---
[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
Thanks for taking a peek. Interesting, it does indeed fix the issue to use labels. Now I have another issue though, I have a case statement in my select which I was specifying like this: select ( ['case when yada yada yada end as something' ] .. If use_labels = True, then the query breaks because the generated sql has two as label parts two it. if I delete the as something part, I think don't know programatically what the label is though. I need to know that because I order by it. Isn't there a way to find out a column label from a query? -Dennis On Feb 27, 12:47 pm, Michael Bayer [EMAIL PROTECTED] wrote: if you run it with full blown logging on, i.e.: import logging logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG) logging.getLogger('sqlalchemy.orm').setLevel(logging.DEBUG) the issue can be detected when you look at the mapper creating instance keys for T (although this is clearly not a novice issue): DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (1,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (3,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (5,), None) not in session[] so its not getting an identity key for every other row, which indicates its looking at the wrong column in the result set. (on each of those Nones, its going to skip that entity) looking at the query: SELECT ts.id, ts.dat, other.ts_id, other.other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id we can see that other has a column called ts_id, which looks exactly like the label that would be made for id in table ts. so thats whats happening here. so throwing on a use_labels=True to the query (or changing the name of ts_id) produces the query: SELECT ts.id AS ts_id, ts.dat AS ts_dat, other.ts_id AS other_ts_id, other.other_dat AS other_other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id that gives the correct results. not sure what SA can really do here to make this kind of issue easier to catch, since the resultproxy itself is where its looking for col label, col name, , etc. the generated labels are generally more accurate. i tried playing around with ResultProxy to make it detect an ambiguity of this nature, but i think it might not be possible unless more flags/switches get passed from the statement to the result (which id rather not do since it further marginalizes straight textual queries), since if the select statement uses table/col labels for each column, there still could be conflicts which dont matter, such as the column names the normal eager loader generates: 'ts_id', 'ts_dat', 'other_4966_ts_id', 'other_4966_other_dat', that result is from column ts_id attached to an Alias other_4966. if we said dont allow any Column to be found twice in the row, then that breaks (since it will match other_4966_ts_id on its _label, ts_id on its name). On Feb 27, 2007, at 12:09 PM, Dennis Muhlestein wrote: from sqlalchemy import * e=create_engine('sqlite://memory') ts=Table('ts',e, Column ( 'id',Integer,primary_key=True), Column ( 'dat',Integer,nullable=False)) ts.create() to_oneornone=Table('other',e, Column ( 'ts_id', Integer,ForeignKey('ts.id'), primary_key=True, nullable=False ), Column ( 'other_dat', Integer, nullable=False ) ) to_oneornone.create() class T(object): pass T.mapper=mapper(T,ts) class To(object):pass To.mapper=mapper(To,to_oneornone,properties={'ts':relation (T,backref=backref('other',uselist=False))}) s=create_session() for x in range(10): t=T() t.dat=x s.save(t) if x % 2 == 0: # test every other T has an optional data o=To() o.other_dat=x t.other=o s.save(t) s.flush() s.clear() somedata=s.query(T).options(eagerload('other')).select() print 'Number results should be 10: ', len(somedata) s.clear() sel=select([ts,to_oneornone], from_obj=[ts.outerjoin(to_oneornone)]) print Raw select also is 10: , len(sel.execute().fetchall() ) print Instances should also be 10: , len(s.query(T).options (contains_eager('other')).instances(sel.execute())) --~--~-~--~~~---~--~~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~--~~~~--~~--~--~---
[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
the label is always tablename_columnname. youd have to show me where you need that to be programmatic. On Feb 27, 2007, at 2:29 PM, Dennis wrote: Thanks for taking a peek. Interesting, it does indeed fix the issue to use labels. Now I have another issue though, I have a case statement in my select which I was specifying like this: select ( ['case when yada yada yada end as something' ] .. If use_labels = True, then the query breaks because the generated sql has two as label parts two it. if I delete the as something part, I think don't know programatically what the label is though. I need to know that because I order by it. Isn't there a way to find out a column label from a query? -Dennis On Feb 27, 12:47 pm, Michael Bayer [EMAIL PROTECTED] wrote: if you run it with full blown logging on, i.e.: import logging logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG) logging.getLogger('sqlalchemy.orm').setLevel(logging.DEBUG) the issue can be detected when you look at the mapper creating instance keys for T (although this is clearly not a novice issue): DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (1,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (3,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (5,), None) not in session[] so its not getting an identity key for every other row, which indicates its looking at the wrong column in the result set. (on each of those Nones, its going to skip that entity) looking at the query: SELECT ts.id, ts.dat, other.ts_id, other.other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id we can see that other has a column called ts_id, which looks exactly like the label that would be made for id in table ts. so thats whats happening here. so throwing on a use_labels=True to the query (or changing the name of ts_id) produces the query: SELECT ts.id AS ts_id, ts.dat AS ts_dat, other.ts_id AS other_ts_id, other.other_dat AS other_other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id that gives the correct results. not sure what SA can really do here to make this kind of issue easier to catch, since the resultproxy itself is where its looking for col label, col name, , etc. the generated labels are generally more accurate. i tried playing around with ResultProxy to make it detect an ambiguity of this nature, but i think it might not be possible unless more flags/switches get passed from the statement to the result (which id rather not do since it further marginalizes straight textual queries), since if the select statement uses table/col labels for each column, there still could be conflicts which dont matter, such as the column names the normal eager loader generates: 'ts_id', 'ts_dat', 'other_4966_ts_id', 'other_4966_other_dat', that result is from column ts_id attached to an Alias other_4966. if we said dont allow any Column to be found twice in the row, then that breaks (since it will match other_4966_ts_id on its _label, ts_id on its name). On Feb 27, 2007, at 12:09 PM, Dennis Muhlestein wrote: from sqlalchemy import * e=create_engine('sqlite://memory') ts=Table('ts',e, Column ( 'id',Integer,primary_key=True), Column ( 'dat',Integer,nullable=False)) ts.create() to_oneornone=Table('other',e, Column ( 'ts_id', Integer,ForeignKey('ts.id'), primary_key=True, nullable=False ), Column ( 'other_dat', Integer, nullable=False ) ) to_oneornone.create() class T(object): pass T.mapper=mapper(T,ts) class To(object):pass To.mapper=mapper(To,to_oneornone,properties={'ts':relation (T,backref=backref('other',uselist=False))}) s=create_session() for x in range(10): t=T() t.dat=x s.save(t) if x % 2 == 0: # test every other T has an optional data o=To() o.other_dat=x t.other=o s.save(t) s.flush() s.clear() somedata=s.query(T).options(eagerload('other')).select() print 'Number results should be 10: ', len(somedata) s.clear() sel=select([ts,to_oneornone], from_obj=[ts.outerjoin(to_oneornone)]) print Raw select also is 10: , len(sel.execute().fetchall() ) print Instances should also be 10: , len(s.query(T).options (contains_eager('other')).instances(sel.execute())) --~--~-~--~~~---~--~~ 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 [EMAIL PROTECTED] For more options,
[sqlalchemy] Re: contains_eager is somehow not loading all the instances.
Well, columnname isn't a simple column in the case of a case statement... the label is turning out like this: casewhenhas_testtrueandscoreisnullandgender1then1whenscoreisnullthen2elsescoreend I haven't found a way to manually assign a label to a text clause yet, but before I tried use_labels=True, I has appended as score to the case clause and that worked. On Feb 27, 2:44 pm, Michael Bayer [EMAIL PROTECTED] wrote: the label is always tablename_columnname. youd have to show me where you need that to be programmatic. On Feb 27, 2007, at 2:29 PM, Dennis wrote: Thanks for taking a peek. Interesting, it does indeed fix the issue to use labels. Now I have another issue though, I have a case statement in my select which I was specifying like this: select ( ['case when yada yada yada end as something' ] .. If use_labels = True, then the query breaks because the generated sql has two as label parts two it. if I delete the as something part, I think don't know programatically what the label is though. I need to know that because I order by it. Isn't there a way to find out a column label from a query? -Dennis On Feb 27, 12:47 pm, Michael Bayer [EMAIL PROTECTED] wrote: if you run it with full blown logging on, i.e.: import logging logging.basicConfig() logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG) logging.getLogger('sqlalchemy.orm').setLevel(logging.DEBUG) the issue can be detected when you look at the mapper creating instance keys for T (although this is clearly not a novice issue): DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (1,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (3,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (None,), None) not in session[] DEBUG:sqlalchemy.orm.mapper.Mapper:(T|ts) _instance(): identity key (class '__main__.T', (5,), None) not in session[] so its not getting an identity key for every other row, which indicates its looking at the wrong column in the result set. (on each of those Nones, its going to skip that entity) looking at the query: SELECT ts.id, ts.dat, other.ts_id, other.other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id we can see that other has a column called ts_id, which looks exactly like the label that would be made for id in table ts. so thats whats happening here. so throwing on a use_labels=True to the query (or changing the name of ts_id) produces the query: SELECT ts.id AS ts_id, ts.dat AS ts_dat, other.ts_id AS other_ts_id, other.other_dat AS other_other_dat FROM ts LEFT OUTER JOIN other ON ts.id = other.ts_id that gives the correct results. not sure what SA can really do here to make this kind of issue easier to catch, since the resultproxy itself is where its looking for col label, col name, , etc. the generated labels are generally more accurate. i tried playing around with ResultProxy to make it detect an ambiguity of this nature, but i think it might not be possible unless more flags/switches get passed from the statement to the result (which id rather not do since it further marginalizes straight textual queries), since if the select statement uses table/col labels for each column, there still could be conflicts which dont matter, such as the column names the normal eager loader generates: 'ts_id', 'ts_dat', 'other_4966_ts_id', 'other_4966_other_dat', that result is from column ts_id attached to an Alias other_4966. if we said dont allow any Column to be found twice in the row, then that breaks (since it will match other_4966_ts_id on its _label, ts_id on its name). On Feb 27, 2007, at 12:09 PM, Dennis Muhlestein wrote: from sqlalchemy import * e=create_engine('sqlite://memory') ts=Table('ts',e, Column ( 'id',Integer,primary_key=True), Column ( 'dat',Integer,nullable=False)) ts.create() to_oneornone=Table('other',e, Column ( 'ts_id', Integer,ForeignKey('ts.id'), primary_key=True, nullable=False ), Column ( 'other_dat', Integer, nullable=False ) ) to_oneornone.create() class T(object): pass T.mapper=mapper(T,ts) class To(object):pass To.mapper=mapper(To,to_oneornone,properties={'ts':relation (T,backref=backref('other',uselist=False))}) s=create_session() for x in range(10): t=T() t.dat=x s.save(t) if x % 2 == 0: # test every other T has an optional data o=To() o.other_dat=x t.other=o s.save(t) s.flush() s.clear() somedata=s.query(T).options(eagerload('other')).select() print 'Number results should be 10: ', len(somedata) s.clear() sel=select([ts,to_oneornone],