Thanks. Doing that already. On Tue, 1 May 2018, 18:55 Richard Vézina <ml.richard.vez...@gmail.com> wrote:
> I really recommand you to go through this book chapiter : > > http://web2py.com/books/default/chapter/29/02/the-python-language > > You will learn a lot of thing over which you fall right now. > > You also can use type(some_python_object) from the shell to understand > what you work with... You also can use print and look at the data structure > of the raw object before trying to loop over it while expecting a behavior > but forgot that you iterate over a dict and not list for instance... > > Richard > > On Tue, May 1, 2018 at 11:51 AM, Richard Vézina < > ml.richard.vez...@gmail.com> wrote: > >> Are you querying multiple table?? You can do a join... That way you will >> have all the value for every fields the only catch is that when you join to >> disambiguate fields names dal use table.field instead of just field as >> field name so it migth happen that if you call "manually" vs >> "programmatically" you field you forgot about that... You have to do >> db.table['table.field']... >> >> Richard >> >> On Tue, May 1, 2018 at 11:22 AM, Maurice Waka <mauricew...@gmail.com> >> wrote: >> >>> Thanks. >>> It iterates well giving some fields data, but not all as needed. I get >>> data from some 4 fields only. I have about 60 in some db. Plus there is >>> this: >>> <pydal.helpers.classes.recordupdater> >>> >>> On Tue, 1 May 2018, 16:44 Richard Vézina <ml.richard.vez...@gmail.com> >>> wrote: >>> >>>> for f, v in row: >>>> >>>> Should be >>>> >>>> for f, v in row.iteritems(): >>>> >>>> k, v for key, value, but I use f instead of k because you will have >>>> field_name and value in this for loop... >>>> >>>> Richard >>>> >>>> On Mon, Apr 30, 2018 at 11:39 PM, Maurice Waka <mauricew...@gmail.com> >>>> wrote: >>>> >>>>> What would f, v be. >>>>> I get this error : ValueError : too many values to unpack >>>>> >>>>> On Mon, 30 Apr 2018, 20:38 Richard Vézina <ml.richard.vez...@gmail.com> >>>>> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Mon, Apr 30, 2018 at 1:21 PM, Maurice Waka <mauricew...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Sorry I tried to clarify by my new question : >>>>>>> >>>>>>> If I have a column with data like db.persons with data like >>>>>>> Carl >>>>>>> Junior >>>>>>> Maggie >>>>>>> Tom >>>>>>> Derrick >>>>>>> >>>>>>> And each column name has other fields with data such as: >>>>>>> persons.name persons.age persons.location persons.occupation >>>>>>> persons.interests >>>>>>> Carl 23 London Neuroscientist brainy stuff >>>>>>> Junior 25 Tokyo doctor medical research >>>>>>> Maggie 33 Nairobi farmer GMO research >>>>>>> Tom 25 Sydney teacher educational ideas >>>>>>> Derrick 21 Chicago surgeon Cutting through >>>>>>> >>>>>>> >>>>>>> >>>>>>> I want to iterate through the column persons.nameand randomly pick >>>>>>> a name and using the rows object, display all data about the person. >>>>>>> >>>>>>> If I do >>>>>>> rows_name = db().select(db.persons.name).column() >>>>>>> >>>>>> >>>>>> >>>>>> The above should be : >>>>>> >>>>>> fields = db.persons.fields >>>>>> # You should have in fields a list of all fields names you migth want >>>>>> to remove "id" field by filtering it or find index and pop it out of the >>>>>> list >>>>>> # ex.: fields.pop(fields.index('id')) >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> >>>>>>> rows = db(db.persons.ALL).select() >>>>>>> >>>>>> >>>>>> db(where_clause).select(fields_name_separated_by_comma) >>>>>> >>>>>> The above is completly wrong as you pass the fields instead of >>>>>> specifying your where clause parameter... >>>>>> >>>>>> In you example you really only need select like this : >>>>>> >>>>>> def some_func_name() >>>>>> rows = db(db.persons.id > 0).select(db.persons.ALL) >>>>>> >>>>>> rows_values = [] >>>>>> for row in rows: >>>>>> row_value = [] >>>>>> for f, v in row: >>>>>> if f != 'id': >>>>>> row_value.append(v) >>>>>> rows_values.append(row_value) >>>>>> return rows_values >>>>>> >>>>>> ret = some_func_name() >>>>>> >>>>>> for r in ret: >>>>>> print(' '.join(ret)) >>>>>> >>>>>> I didn't tested it but the above should work... >>>>>> >>>>>> Good luck >>>>>> >>>>>>> >>>>>>> for row in rows: >>>>>>> if rows_name[0] == 'Maggie': >>>>>>> for row in rows: >>>>>>> return [row.age+' '+row.location+' '+row.occupation+' >>>>>>> '+row.interests] >>>>>>> >>>>>>> The problem is that if I query 'Carl' which is the first item, I get >>>>>>> the response but I cant query any other name . >>>>>>> Regards >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Resources: >>>>>>> - http://web2py.com >>>>>>> - http://web2py.com/book (Documentation) >>>>>>> - http://github.com/web2py/web2py (Source code) >>>>>>> - https://code.google.com/p/web2py/issues/list(Report Issues) >>>>>>> --- >>>>>>> You received this message because you are subscribed to a topic in >>>>>>> the Google Groups "web2py-users" group. >>>>>>> To unsubscribe from this topic, visit >>>>>>> https://groups.google.com/d/topic/web2py/ynBOuIdufso/unsubscribe. >>>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>>> web2py+unsubscr...@googlegroups.com. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> I had been using python isle to test some modules. Now I just want >>>>>>> to get a clearer code by removing the long codes. >>>>>>> >>>>>>> >>>>>>> On Mon, 30 Apr 2018, 20:09 Richard Vézina < >>>>>>> ml.richard.vez...@gmail.com> wrote: >>>>>>> >>>>>>>> Man this is convulated... >>>>>>>> >>>>>>>> Not sure what is in name4 "name4 is a list that contains items >>>>>>>> found in db.health.name, as well as other dbs." what items are you >>>>>>>> referring at?? What other dbs? >>>>>>>> >>>>>>>> Why are you connecting to sqlite by your own... >>>>>>>> >>>>>>>> This check is just weird : >>>>>>>> >>>>>>>> if id == item in name4: >>>>>>>> >>>>>>>> I would suggest you don't use function to achieve what you try to >>>>>>>> do it just make it overcomplicated... Also never define functions in >>>>>>>> models >>>>>>>> files it will slow down your app as models files are executed at each >>>>>>>> request. >>>>>>>> >>>>>>>> My guess is that if you end with the final list that you showed us >>>>>>>> is because at some point you put the name of the fields you want >>>>>>>> instead of >>>>>>>> the value attached to them... >>>>>>>> >>>>>>>> But seriously it very difficult to help... >>>>>>>> >>>>>>>> You could show us all the models that are important to the problem >>>>>>>> and show us an example of what you want at the end. >>>>>>>> >>>>>>>> >>>>>>>> I also don't know from you field name in health table what they >>>>>>>> content. >>>>>>>> >>>>>>>> So for example let say >>>>>>>> >>>>>>>> >>>>>>>> You have a table name fruit >>>>>>>> >>>>>>>> rows = db(db.fruit.id > 0).select(db.fruit.ALL) >>>>>>>> >>>>>>>> With a fruit_name field >>>>>>>> >>>>>>>> for r in rows: >>>>>>>> print('A {0} is a fruit blah blah blah. A {0} when its green >>>>>>>> is bitter to taste. A {0} when ripe looks bright yellow and tastes >>>>>>>> sweet.'.format(r.fruit_name) >>>>>>>> >>>>>>>> That's it!! >>>>>>>> >>>>>>>> Richard >>>>>>>> >>>>>>>> >>>>>>>> On Sat, Apr 28, 2018 at 11:02 AM, Maurice Waka < >>>>>>>> mauricew...@gmail.com> wrote: >>>>>>>> >>>>>>>>> Thanks, but I seem to be having a challenge when returning the >>>>>>>>> rows from a specific id name or number. I tried this on a different >>>>>>>>> app as >>>>>>>>> follows: >>>>>>>>> >>>>>>>>> Model: >>>>>>>>> >>>>>>>>> db.define_table( "health", >>>>>>>>> Field('name', 'string'), >>>>>>>>> Field('definition', 'text', length= 1000000, >>>>>>>>> default="We'll update soon.", notnull=True), >>>>>>>>> Field('abnvals', 'text', length= >>>>>>>>> 1000000,default="We'll update soon.", notnull=True), >>>>>>>>> Field('normvals', 'text', length= >>>>>>>>> 1000000,default="We'll update soon.", notnull=True), >>>>>>>>> def selections(): >>>>>>>>> code >>>>>>>>> return name4# name4 is a list that contains items found in >>>>>>>>> db.health.name, as well as other dbs. >>>>>>>>> def refer11(): >>>>>>>>> db = current.db >>>>>>>>> rows = db(db.health).iterselect() >>>>>>>>> for row in rows: >>>>>>>>> id = row.name >>>>>>>>> if id == item in name4: >>>>>>>>> #return [', '.join(item) for item in rows]# Gives a list of the >>>>>>>>> titles only as: ['name','definition','abnvals','normvals',] >>>>>>>>> #return [item for item in rows]# Gives >>>>>>>>> this: [<row> >>>>>>>>> #return row# gives this : <row> >>>>>>>>> #return [item for item in row]# Gives a >>>>>>>>> list of the titles only as: >>>>>>>>> ['name','definition','abnvals','normvals',] >>>>>>>>> >>>>>>>>> When using sql speak, this works well: >>>>>>>>> def refer11(): >>>>>>>>> id = 0 >>>>>>>>> location = "" >>>>>>>>> conn = sqlite3.connect('wellness.db') >>>>>>>>> c = conn.cursor() >>>>>>>>> c.execute('select * from health') >>>>>>>>> records = c.fetchall() >>>>>>>>> for record in records: >>>>>>>>> id = record[1] >>>>>>>>> for item in name4: >>>>>>>>> if id == item in name4: >>>>>>>>> return record[2:] >>>>>>>>> >>>>>>>>> If row.name has e.g. apple, mango, guava, pineapple, then >>>>>>>>> >>>>>>>>> and the fields contain info about the fruits e.g. >>>>>>>>> >>>>>>>>> if id/row.name picks mango, i want a list of these: >>>>>>>>> >>>>>>>>> definition data: A mango is a fruit blah blah blah. >>>>>>>>> abnvals data: A mango when its green is bitter to taste. >>>>>>>>> normvals data: A mango when ripe looks bright yellow and tastes >>>>>>>>> sweet. >>>>>>>>> >>>>>>>>> so when doing return row >>>>>>>>> I should get ['A mango is a fruit blah blah blah. A mango when >>>>>>>>> its green is bitter to taste. A mango when ripe looks bright >>>>>>>>> yellow and tastes sweet.] >>>>>>>>> and not >>>>>>>>> ['name','definition','abnvals','normvals',] >>>>>>>>> >>>>>>>>> On Fri, Apr 27, 2018 at 6:16 PM, Richard Vézina < >>>>>>>>> ml.richard.vez...@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> for f in db.table.fields: >>>>>>>>>> print f >>>>>>>>>> >>>>>>>>>> or >>>>>>>>>> >>>>>>>>>> rows = db(db.fruits.id > 0).select(db.fruits.ALL) # ALL means >>>>>>>>>> all fields >>>>>>>>>> >>>>>>>>>> for r in rows: >>>>>>>>>> print(r) >>>>>>>>>> >>>>>>>>>> You can control which field you want with the previous example >>>>>>>>>> >>>>>>>>>> myfields = [f for f in db.table.fields if >>>>>>>>>> SOME_FILTERING_CHECK_OVER_THE_FIELD_YOU_WANT] >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> for r in rows: >>>>>>>>>> for f in myfields: >>>>>>>>>> print(r[f]) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> You can play around that you should be able to figure out how you >>>>>>>>>> can do what you wanna do. >>>>>>>>>> >>>>>>>>>> Richard >>>>>>>>>> >>>>>>>>>> On Fri, Apr 27, 2018 at 10:08 AM, Maurice Waka < >>>>>>>>>> mauricew...@gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> Addendum >>>>>>>>>>> >>>>>>>>>>> I want a single list of the items (the data from all fields) >>>>>>>>>>> >>>>>>>>>>> regards >>>>>>>>>>> >>>>>>>>>>> On Fri, Apr 27, 2018 at 5:06 PM, Maurice Waka < >>>>>>>>>>> mauricew...@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> There are several fields in my db such as this: >>>>>>>>>>>> >>>>>>>>>>>> db.define_table('fruit', Field('id', 'reference auth_user'), >>>>>>>>>>>> Field('apple','boolean',label=T('Apple')), >>>>>>>>>>>> Field('apricot','boolean',label=T('Apricot')), >>>>>>>>>>>> Field('cherry','boolean',label=T('Cherry')), >>>>>>>>>>>> Field('fig','boolean', label=T('Fig')), Field('lychee','boolean', >>>>>>>>>>>> label=T('Lychee')), Field('peach','boolean', label=T('Peach')), >>>>>>>>>>>> Field('pear','boolean', label=T('Pear')), Field('plum','boolean', >>>>>>>>>>>> label=T('Plum'))) >>>>>>>>>>>> If i want to print items from a specific field i would do: >>>>>>>>>>>> >>>>>>>>>>>> rows = db(db.fruits)select()for row in rows: >>>>>>>>>>>> return row.apple >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Now I want to return all data from all fields. How Can i go about >>>>>>>>>>>> it. >>>>>>>>>>>> >>>>>>>>>>>> I have tried: >>>>>>>>>>>> >>>>>>>>>>>> <pre class="m_-3733297408904191050m_6143588816043257 >>>>>>>>>>>> >>>>>>>>>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.