This is because I have a movie function that throws up any reviews; here it is:
````
@app.route("/movies/<movie>")
def movie(movie):
lol = movie.split(',')
movie_title = lol[0]
res = requests.get("http://www.omdbapi.com/", params={"apikey": "c2c76d64",
"t": movie_title, "plot": "full"})
omdb_data = res.json()
ratings_list = omdb_data['Ratings']
check_for_review_statement = sqlalchemy.text('SELECT * FROM reviews WHERE
movie = :movie')
check_for_review = engine.execute(check_for_review_statement,
movie=movie_title).fetchall()
if res.status_code == 200:
if len(check_for_review) != 0:
check_for_review_splitted = str(check_for_review).split(',')
return render_template("movie_individual.html", movie=lol,
check_for_review=check_for_review_splitted, omdb_data=omdb_data,
ratings_list=ratings_list)
else:
return render_template("movie_no_review.html", movie=lol,
omdb_data=omdb_data, ratings_list=ratings_list)
else:
if len(check_for_review) != 0:
check_for_review_splitted = str(check_for_review).split(',')
return render_template("movie_noomdbdata.html", movie=lol,
check_for_review=check_for_review_splitted)
else:
return render_template("movie_gotnothing.html", movie=lol,
res=res.json())
````
And it prints out the review.Here's a pic attached to this email.
Cravan
On 3/7/19, 10:13 PM, "Simon King" <[email protected] on behalf of
[email protected]> wrote:
On Wed, Jul 3, 2019 at 11:54 AM Cravan <[email protected]> wrote:
>
> 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',)
Everything above this point is routine stuff that SQLAlchemy does to
figure out what verison of Postgresql it's talking to and what options
it is running with. You can safely ignore it.
The next line is the first query that you've run:
> 2019-07-03 18:49:46,173 INFO sqlalchemy.engine.base.Engine SELECT title,
year, "imdbRating" FROM movies WHER
> E "imdbID" = %(imdb_id)s
These are the parameters that you passed to the query (in this case,
just the imdb_id):
> 2019-07-03 18:49:46,173 INFO sqlalchemy.engine.base.Engine {'imdb_id':
'tt1490017'}
The "Col" line tells you the names of the columns in the result set:
> 2019-07-03 18:49:46,991 DEBUG sqlalchemy.engine.base.Engine Col ('title',
'year', 'imdbRating')
...and then you will normally see a "Row" line for each row in the
result. In this case your query returned a single row. The elements of
the row tuple correspond to the columns from the Col line.
> 2019-07-03 18:49:46,991 DEBUG sqlalchemy.engine.base.Engine Row ('The
Lego Movie', 2014, Decimal('7.8'))
I assume this is from your "print(check_for_api)" statement:
> ('The Lego Movie', 2014, Decimal('7.8'))
Here's your next query:
> 2019-07-03 18:49:47,862 INFO sqlalchemy.engine.base.Engine SELECT * FROM
reviews WHERE movie = %(movie_title
> )s
...and the parameters for that query:
> 2019-07-03 18:49:47,863 INFO sqlalchemy.engine.base.Engine
{'movie_title': 'The Lego Movie'}
The column names in the result set:
> 2019-07-03 18:49:48,699 DEBUG sqlalchemy.engine.base.Engine Col ('movie',
'rating', 'username', 'review')
...but then there are no Row lines, so the query didn't return any
rows. In other words, there are no rows in the "reviews" table where
the "movie" column equals "The Lego Movie".
You said that you've confirmed that you've entered the review. How
have you confirmed that?
Simon
> []
> {"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.
--
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/CAFHwexc6%2BT%2BzNK%3DR2WPefSgGVkYnC8CyjGkF_ydN3HEFp_ggmg%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/B6DBDE22-5A75-4DE6-B69C-346E5E597F9E%40gmail.com.
For more options, visit https://groups.google.com/d/optout.