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.

Reply via email to