Statements like this don't do what you are expecting:

    elif year == '' or None:

"==" has higher operator precedence than "or", so this is interpreted as:

    elif (year == '') or None:

...which is the same as:

    elif year == '':

This one is more complicated:

    if year == '' or None and imdbid == '' or None:

"==" is still the highest precedence, followed by "and", and then
"or", so I think this is evaluated as:

    if (year == '') or (None and (imdbid == '')) or None

"None and <anything>" will always be None, so this is actually the same as:

    if (year == '')  or None or None:

...which is equivalent to:

    if (year == ''):

If you want to test if a value is either an empty string or None, you
would use one of these forms:

    if (year == '') or (year is None):

Or:

    if year in ('', None):

Hope that helps,

Simon

On Tue, Jun 25, 2019 at 4:34 AM Cravan <cravan...@gmail.com> wrote:
>
> Hi all,
>
>                 I’m working on the same movie review project as before, but I 
> recently tried to create a new search module for my search function, which is 
> to search for the movie’s imdbid. Each movie has its own unique imdbid, but 
> when I search for a single unique imdbid, somehow all the movies pop out. Can 
> someone point out the source of the problem? On a side note, I tried to 
> include a print statement in each condition statement, but nothing is 
> printed, and I tried fetchone instead of fetchall, but it didn’t work either. 
> Thanks in advance!
>
> Here is my results function:
>
> ````
>
> @app.route("/movie_results")
>
> def movie_results():
>
>     name = request.args.get("movie.title")
>
>     year = request.args.get("movie.year")
>
>     imdbid = request.args.get("movie.imdbid")
>
>     name_pattern = "%" + name + "%"
>
>     if year == '' or None and imdbid == '' or None:
>
>         search_movie_statement = sqlalchemy.text('SELECT * FROM movies WHERE 
> title ILIKE :movie_title')
>
>         movie_specific = engine.execute(search_movie_statement, 
> movie_title=name_pattern).fetchall()
>
>         if len(movie_specific) != 0 and movie_specific is not None:
>
>             return render_template("movie_specific.html", 
> movie_specific=movie_specific)
>
>         if len(movie_specific) == 0:
>
>             return render_template("error2.html", message="No such movie.")
>
>     elif name == '' or None and imdbid == '' or None:
>
>         search_movie_statement = sqlalchemy.text('SELECT * FROM movies WHERE 
> year = :year')
>
>         movie_specific = engine.execute(search_movie_statement, 
> year=year).fetchall()
>
>         if len(movie_specific) != 0 and movie_specific is not None:
>
>             return render_template("movie_specific.html", 
> movie_specific=movie_specific)
>
>         if len(movie_specific) == 0:
>
>             return render_template("error2.html", message="No such movie.")
>
>
>
>     elif name == '' or None and year == '' or None:
>
>         search_movie_statement = sqlalchemy.text('SELECT * FROM movies WHERE 
> "imdbID" = :imdbId')
>
>         movie_specific = engine.execute(search_movie_statement, 
> imdbId=imdbid).fetchall()
>
>         if len(movie_specific) != 0 and movie_specific is not None:
>
>             return render_template("movie_specific.html", 
> movie_specific=movie_specific)
>
>         if len(movie_specific) == 0:
>
>             return render_template("error2.html", message="No such movie.")
>
>
>
>     elif name == '' or None:
>
>         print(name)
>
>         search_movie_statement = sqlalchemy.text('SELECT * FROM movies WHERE 
> "imdbID" = :imdbid AND year = :year')
>
>         movie_specific = engine.execute(search_movie_statement, 
> imdbid=imdbid, year=year).fetchall()
>
>         if len(movie_specific) != 0 and movie_specific is not None:
>
>             return render_template("movie_specific.html", 
> movie_specific=movie_specific)
>
>         if len(movie_specific) == 0:
>
>             return render_template("error2.html", message="No such movie.")
>
>
>
>     elif year == '' or None:
>
>         search_movie_statement = sqlalchemy.text('SELECT * FROM movies WHERE 
> "imdbID" = :imdbid and title ILIKE :movie_title')
>
>         movie_specific = engine.execute(search_movie_statement, 
> imdbid=imdbid, movie_title=name_pattern).fetchall()
>
>         if len(movie_specific) != 0 and movie_specific is not None:
>
>             return render_template("movie_specific.html", 
> movie_specific=movie_specific)
>
>         if len(movie_specific) == 0:
>
>             return render_template("error2.html", message="No such movie.")
>
>
>
>     elif imdbid == '' or None:
>
>         search_movie_statement = sqlalchemy.text('SELECT * FROM movies WHERE 
> year = :year and title ILIKE :movie_title')
>
>         movie_specific = engine.execute(search_movie_statement, year=year, 
> movie_title=name_pattern).fetchall()
>
>         if len(movie_specific) != 0 and movie_specific is not None:
>
>             return render_template("movie_specific.html", 
> movie_specific=movie_specific)
>
>         if len(movie_specific) == 0:
>
>             return render_template("error2.html", message="No such movie.")
>
>
>
>     elif name != None and name != '' and year != '' and year != None and 
> imdbid != '' and imdbid != None:
>
>         search_movie_statement = sqlalchemy.text('SELECT * FROM movies WHERE 
> year = :year and title ILIKE :movie_title and imdbID = :imdbid')
>
>         movie_specific = engine.execute(search_movie_statement, year=year, 
> movie_title=name_pattern, imdbid=imdbid).fetchall()
>
>         if len(movie_specific) != 0 and movie_specific is not None:
>
>             return render_template("movie_specific.html", 
> movie_specific=movie_specific)
>
>         if len(movie_specific) == 0:
>
>             return render_template("error2.html", message="No such movie.")
>
> ````
>
> Here is my movie table:
>
> ````
>
> CREATE TABLE movies (
>
>       "title" TEXT UNIQUE NOT NULL,
>
>       "year" INTEGER NOT NULL,
>
>       "runtime" INTEGER NOT NULL,
>
>       "imdbID" VARCHAR NOT NULL,
>
>       "imdbRating" NUMERIC NOT NULL
>
>   );
>
> ````
>
> Thanks,
>
> Cravan
>
> --
> 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 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.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/A18038FC-74A8-4C04-9147-69CD429A1E75%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 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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/CAFHwexci36V0PyLvvRAQ7VUnTnMbQJabyJvdY30Th8%2BhXujcRQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to