db.define_table('group_of_people', Field('name', 'string'),)
db.define_table('person', Field('name', 'string'), Field('age', 'integer'), Field('group_of_people', 'reference group_of_people'),)
def data(): persons = db((db.person.id > 0) & (db.group_of_people.id == db.person.group_of_people)).select(db.person.name, db.person.age, db.group_of_people.name) parsed_people = {'data': []}
for person in persons:
p = {}
logger.debug("tests::data - person: %s" % pformat(person))
for table in person:
logger.debug("tests::data - table: %s" % pformat(table))
logger.debug("tests::data - table data: %s" % pformat(person[table])) for field in person[table]:
logger.debug("tests::data - %s: %s" % (field, pformat(person[table][field]))) p[field] = person[table][field] if person[table][field] is not None else ''
logger.debug("tests::data - p: %s" % pformat(p)) parsed_people['data'].append(p)
return json.dumps(parsed_people)
{"data": [{"age": 1, "name": "person 1"}, {"age": 2, "name": "person 2"}, ... }
DEBUG:tests:tests::data - person: <Row {'group_of_people': {'name': 'group2'}, 'person': {'age': 1L, 'name': 'person 1'}}>DEBUG:tests:tests::data - table: 'group_of_people'DEBUG:tests:tests::data - table data: <Row {'name': 'group2'}>DEBUG:tests:tests::data - name: 'group2'DEBUG:tests:tests::data - table: 'person'DEBUG:tests:tests::data - table data: <Row {'age': 1L, 'name': 'person 1'}>DEBUG:tests:tests::data - age: 1LDEBUG:tests:tests::data - name: 'person 1'DEBUG:tests:tests::data - p: {'age': 1L, 'name': 'person 1'}
DEBUG:tests:tests::data - person: <Row {'group_of_people': {'name': 'group2'}, 'person': {'age': 1L, 'id': 1L, 'name': 'person 1'}}>DEBUG:tests:tests::data - table: 'group_of_people'DEBUG:tests:tests::data - table data: <Row {'name': 'group2'}>DEBUG:tests:tests::data - name: 'group2'DEBUG:tests:tests::data - table: 'person'DEBUG:tests:tests::data - table data: <Row {'age': 1L, 'id': 1L, 'name': 'person 1'}>DEBUG:tests:tests::data - update_record: <pydal.helpers.classes.RecordUpdater object at 0x10e8e3810>DEBUG:tests:tests::data - age: 1LDEBUG:tests:tests::data - id: 1LDEBUG:tests:tests::data - delete_record: <pydal.helpers.classes.RecordDeleter object at 0x10e8e3850>DEBUG:tests:tests::data - name: 'person 1'DEBUG:tests:tests::data - p: {'age': 1L, 'delete_record': <pydal.helpers.classes.RecordDeleter object at 0x10e8e3850>, 'id': 1L, 'name': 'person 1', 'update_record': <pydal.helpers.classes.RecordUpdater object at 0x10e8e3810>}
for field in person[table]:
json.dumps(dict(data=[{k: v for sub_row in row.as_dict().values() for (k, v) in sub_row.iteritems()}
for row in persons.render()]))
Hi Anthony,
Thanks for your excellent example and explanation.You're right about the problem with the field names, luckily the problem occurs only in this example, not in production code, but just out of curiosity, would using "with_alias()" help?