On 01/21/2016 06:23 PM, Nana Okyere wrote: > In my flask application, a view function has this piece of code: > > #################################################### > sql_text = text(" \ > SELECT CONNECT_BY_ROOT \ > part_no as ROOT_PART_NO, \ > bc.part_no, \ > bc.cmpnt_part_no, \ > bc.cmpnt_qty, \ > LEVEL AS level_, \ > SYS_CONNECT_BY_PATH (cmpnt_part_no, ' /') AS path_ \ > FROM bom_nana_combined bc \ > START WITH bc.part_no IN ('3358007') CONNECT BY PRIOR bc.part_no = > bc.cmpnt_part_no \ > ORDER SIBLINGS BY part_no \ > ") > > sql_result = db.engine.execute(sql_text).fetchall() #This returns > a ResultProxy object. > results = {"data":sql_result,} > resp = make_response(json.dumps(results)) > return resp > > ########################################################## > An ajax call will be made to this method so I'm creating a custom > response object that contains the data that this query returns. > > I am getting TypeError: ('3358007', '3358007', '0839527', 2, 1, ' > /0839527') is not JSON serializable on the line with json.dumps
the json builtin doesn't use duck-typing or even ABC's to determine if the given structure is a sequence or whatnot, so you need to provide custom serializers as per the example "Extending JSONEncoder" at https://docs.python.org/2/library/json.html. > > This basically means that a row in the ResultProxy object is not json > realizable. I checked the type of the row and found that it is a RowProxy. > My question is, how can I make the Resultproxy json serializable? So it > can look like [{root_part_no: '3358007', cmpnt_part_no:'3358007' > part_no: '0839527', cmpnt_qty:2, level_:1, path_: ' /0839527'}] ? > > > I did the same/similar thing in another app where I made a custom > response from data that was queried from a reflected table object as below: > > ########################################## > > m = db.MetaData() > t = db.Table(tablename, m, autoload = True, autoload_with = db.engine) > results = db.session.query(t).order_by("id").limit(10).all() > > results = {"data":results,} > resp = make_response(json.dumps(results) > resp.headers['Content-type'] = "application/json; charset=utf-8" > return resp > ######################################### > > I realized that in the above code, results = > db.session.query(t).order_by("id").limit(10).all() returns a Query > object; each row is sqlalchemy.util._collections.result unlike the > former where each row was a sqlalchemy.engine.result.RowProxy object. > > I suspect that the rowproxy cannot be json serialized whereas the row in > the Query object (sqlalchemy.util._collections.result) can. What can I > do to make the ResultProxy object json serializable? In my current app, > I'm not querying from a reflected table. As you've seen above, I'm doing > hierarchical query in oracle. that's something that sqlalchemy doesn't > currently implement (if I'm wrong, please let me know). So I'm having to > use the Core and execute raw sql. > > -- > 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 > <mailto:sqlalchemy+unsubscr...@googlegroups.com>. > To post to this group, send email to sqlalchemy@googlegroups.com > <mailto:sqlalchemy@googlegroups.com>. > Visit this group at https://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 https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.