Hi Simon,
I always turn on debug mode using export FLASK_DEBUG=1 in the shell,
but no error pops out, so I have no idea whether that is similar. I tried
echo="debug", but didn’t really understand the results, so I am confused as to
how to edit my code. I have used both edits as suggested, and this is what was
produced:
````
2019-07-03 18:49:43,100 INFO sqlalchemy.engine.base.Engine select version()
2019-07-03 18:49:43,100 INFO sqlalchemy.engine.base.Engine {}
2019-07-03 18:49:43,764 DEBUG sqlalchemy.engine.base.Engine Col ('version',)
2019-07-03 18:49:43,764 DEBUG sqlalchemy.engine.base.Engine Row ('PostgreSQL
11.4 (Ubuntu 11.4-1.pgdg16.04+1
) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11)
5.4.0 20160609, 64-bit',)
2019-07-03 18:49:43,765 INFO sqlalchemy.engine.base.Engine select
current_schema()
2019-07-03 18:49:43,765 INFO sqlalchemy.engine.base.Engine {}
2019-07-03 18:49:44,109 DEBUG sqlalchemy.engine.base.Engine Col
('current_schema',)
2019-07-03 18:49:44,110 DEBUG sqlalchemy.engine.base.Engine Row ('public',)
2019-07-03 18:49:44,534 INFO sqlalchemy.engine.base.Engine SELECT CAST('test
plain returns' AS VARCHAR(60))
AS anon_1
2019-07-03 18:49:44,534 INFO sqlalchemy.engine.base.Engine {}
2019-07-03 18:49:44,947 INFO sqlalchemy.engine.base.Engine SELECT CAST('test
unicode returns' AS VARCHAR(60)
) AS anon_1
2019-07-03 18:49:44,947 INFO sqlalchemy.engine.base.Engine {}
2019-07-03 18:49:45,353 INFO sqlalchemy.engine.base.Engine show
standard_conforming_strings
2019-07-03 18:49:45,353 INFO sqlalchemy.engine.base.Engine {}
2019-07-03 18:49:45,762 DEBUG sqlalchemy.engine.base.Engine Col
('standard_conforming_strings',)
2019-07-03 18:49:45,762 DEBUG sqlalchemy.engine.base.Engine Row ('on',)
2019-07-03 18:49:46,173 INFO sqlalchemy.engine.base.Engine SELECT title, year,
"imdbRating" FROM movies WHER
E "imdbID" = %(imdb_id)s
2019-07-03 18:49:46,173 INFO sqlalchemy.engine.base.Engine {'imdb_id':
'tt1490017'}
2019-07-03 18:49:46,991 DEBUG sqlalchemy.engine.base.Engine Col ('title',
'year', 'imdbRating')
2019-07-03 18:49:46,991 DEBUG sqlalchemy.engine.base.Engine Row ('The Lego
Movie', 2014, Decimal('7.8'))
('The Lego Movie', 2014, Decimal('7.8'))
2019-07-03 18:49:47,862 INFO sqlalchemy.engine.base.Engine SELECT * FROM
reviews WHERE movie = %(movie_title
)s
2019-07-03 18:49:47,863 INFO sqlalchemy.engine.base.Engine {'movie_title': 'The
Lego Movie'}
2019-07-03 18:49:48,699 DEBUG sqlalchemy.engine.base.Engine Col ('movie',
'rating', 'username', 'review')
[]
{"title": "The Lego Movie", "year": 2014, "imdb_id": "tt1490017", "director":
"Phil Lord, Christopher Miller
", "actors": "Will Arnett, Elizabeth Banks, Craig Berry, Alison Brie",
"imdb_rating": 7.8, "review_count": 0
, "average_score": "N.A"}
127.0.0.1 - - [03/Jul/2019 18:49:49] "GET /api/tt1490017 HTTP/1.1" 200 -
````
Also, I used three print statements,
````
print(check_for_api)
......#some code(same as before)
print(check_for_reviews_unsplitted)
......#some code again(same as before)
print (apijson)
````
Thanks,
Cravan
On 3/7/19, 12:07 AM, "Simon King" <[email protected] on behalf of
[email protected]> wrote:
You might want to try turning on debug logging for your SQL statements
by passing echo="debug" when creating your engine:
https://docs.sqlalchemy.org/en/13/core/engines.html#sqlalchemy.create_engine
Amongst other things, this will show the values of parameters that you
are passing to the database.
I'm not sure what your problem is, but I notice that you are using
"SELECT * FROM movies" to load your rows, and then you are assuming
that the columns you get back are in a certain order. (You assume that
the first column is title, the second is year, and the fifth is
imdbrating). It's possible that the columns are coming back in a
different order, and so the value you think is the title is actually
something else.
It would be better to explicitly list the columns you want, something like:
SELECT title, year, imdbrating
FROM movies
WHERE "imdbID" = :imdb_id
Alternatively, the rows that you get back from fetchall() actually
know which columns they came from, so you could do this:
# don't call list() here:
check_for_api = check_for_api_unsplitted[0]
# use dictionary-style access to get the individual values
title = check_for_api["title"]
Simon
On Tue, Jul 2, 2019 at 3:33 PM Cravan <[email protected]> wrote:
>
> Hi all,
>
> One of the other tasks for my movie review assignment is
that I have to create api access to my website, which should return a json
response including a review count. However, I have confirmed that I have
entered a review for a specific movie and it prompts out in my html, but
apparently when I try to print out the json I get 0 reviews for my review
count. Can someone help me troubleshoot? Sorry if it sounds unclear.
>
> ````
>
> @app.route("/api/<imdb_id>")
>
> def api(imdb_id):
>
> check_for_api_statement = sqlalchemy.text('SELECT * FROM movies WHERE
"imdbID" = :imdb_id')
>
> check_for_api_unsplitted = engine.execute(check_for_api_statement,
imdb_id=imdb_id).fetchall()
>
> res = requests.get("http://www.omdbapi.com/", params={"apikey":
"c2c76d64", "i": imdb_id, "plot": "full"})
>
> omdb_data = res.json()
>
> check_for_api = list(check_for_api_unsplitted[0])
>
> title_unsplitted = check_for_api[0]
>
> title = check_for_api[0]
>
> year = check_for_api[1]
>
> imdb_id = imdb_id
>
> imdbrating = check_for_api[4]
>
> director = omdb_data['Director']
>
> actors = omdb_data['Actors']
>
> check_for_reviews_statement = sqlalchemy.text('SELECT * FROM reviews
WHERE movie = :movie_title')
>
> check_for_reviews_unsplitted =
engine.execute(check_for_reviews_statement, movie_title=title).fetchall()
>
> review_count = len(check_for_reviews_unsplitted)
>
> print(check_for_reviews_unsplitted) #this returns a blank list for
some strange reason
>
> if len(check_for_reviews_unsplitted) != 0:
>
> check_for_reviews = check_for_reviews_unsplitted.split(',')
>
> score = float(check_for_reviews[4])
>
> average_score = score/review_count
>
> else:
>
> average_score = "N.A"
>
> a =
>
>
{"title":title,"year":year,"imdb_id":imdb_id,"director":director,"actors":actors,"imdb_rating":imdbrating,"review_count":review_count,"average_score":average_score}
>
> apijson = json.dumps(a, cls=CustomJsonEncoder)
>
> print (apijson)
>
> if len(check_for_api) != 0:
>
> return render_template("api.html", apijson=apijson)
>
> else:
>
> return render_template("error2.html", message="No such movie.")
>
> --
> SQLAlchemy -
> The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
Verifiable Example. See http://stackoverflow.com/help/mcve for a full
description.
> ---
> 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 [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/sqlalchemy.
> To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/7DB000C8-1EBC-48AF-A24F-202196C743CF%40gmail.com.
> For more options, visit https://groups.google.com/d/optout.
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and
Verifiable Example. See http://stackoverflow.com/help/mcve for a full
description.
---
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/CAFHwexfVMZTVX6hKDvxgRFG0Wrc%3DhSfwU05XQGm%2B7gsRTtR_Cw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/FD18A0DF-70BD-4867-BA8C-A90DD76E24A3%40gmail.com.
For more options, visit https://groups.google.com/d/optout.