2016-06-10 13 views
0

Ich muss einen Spaltennamen nur einmal in die SQL-Abfrage übergeben. Dieser Code funktioniert ordnungsgemäß bei der Bestellung, aber wenn eine Schaltfläche auf der Seite gedrückt wird (die Inhalt in eine Tabelle einfügt), wird dieser Fehler ausgelöst.kann 'str' und 'nonetype' Objekte in Python/sql/flask nicht verketten

„kann nicht verketten‚str‘und‚nonetype‘Objekte“

if request.method == "POST": 
    ## DISPLAYING MOVIES ## 

    general = db.execute(
     """ 
     SELECT Movies.Movie_ID, Movies.Name, Movies.Year, Movies.Image 
     FROM Movie_Genre 
     JOIN Movies ON Movie_Genre.Movie_ID = Movies.Movie_ID 
     JOIN Genres ON Movie_Genre.Genre_ID = Genres.Genre_ID 
     WHERE Genres.Genre = ? AND Rating_IMDB >= ? 
     ORDER BY """+order+"""; 
     """, 
     (str(selectedGenre), rating) 
     ) 
    basic = general.fetchall() 

Dies ist der Code, der die Fehler angezeigt werden verursacht .. Der Code wird ausgeführt, wenn ein Benutzer die ‚Favoriten‘ Taste drückt.

try: 
    clicked = request.get_json(['data']) 
    user = db.execute(
     """ 
     SELECT User_ID 
     FROM Users 
     WHERE Username = ?; 
     """, 
     (user_name,) 
     ) 

    userID = user.fetchone()[0] 

    user_favs = db.execute(
     """ 
     INSERT INTO User_Favs 
     VALUES (?,?); 
     """, 
     (userID, clicked,) 
     ) 
    db.commit() 
    db.close() 
    gc.collect() 
except: 
    pass 

EDIT

Dies ist, wo Ordnung herkommt, ist es so gut wie nie ‚Keine‘

order = request.form.get('order') 
while order: 
    if order == "Newest": 
     order = "Year DESC" 
     break 
    elif order == "Oldest": 
     order = "Year ASC" 
     break 
    elif order == "Best": 
     order = "Rating_IMDB DESC" 
     break 
    elif order == "Worst": 
     order = "Rating_IMDB ASC" 
     break 
    else: 
     order == '' 
     break 

Wenn das Problem mit der Verkettung Abfrage würde nicht auf dann die Reihenfolge war arbeiten die Website, aber es tut es. Der Fehler tritt nur auf, wenn ich die 'Favorit'-Taste drücke. Das fügt Daten in die Datenbank ein.

+0

Ihre Decke außer wird nicht sehr informativ –

+0

Okay, so wird der Fehler als "400: Bad Request" angezeigt. Danke, dass du das herausgebt hast, btw – 0248881

+2

Also woher kommt 'order', da es eindeutig' None' ist (das sagt der Fehler). Ich nehme an, dass alle Snippets von derselben View-Funktion stammen. Sie könnten zum Beispiel prüfen, ob "Order ist None" ist und entsprechend handeln. –

Antwort

0

In der else-Klausel Sie schrieb:

else: 
     order == '' 
     break 

Statt:

else: 
     order = '' 
     break 

Auch die while Klausel ist überflüssig, da der Code in diesem Block nur einmal ausgeführt wird (wegen der break s in jeder Bedingung). Und wenn die request.form.get('order')None zurückgibt, werden Sie nicht einmal zu diesem Code kommen.

+0

Danke, dass Sie das bemerkt haben. Ich habe es geändert, und das Ergebnis ist immer noch dasselbe. Ich habe die Variable vor der Abfrage geflasht und es scheint nicht "None" zu sein. – 0248881

+0

Was soll 'while order' tun? –

+0

Fügen Sie einige Debugging-Abzüge in einigen strategischen Punkten wie in der while-Klausel vor und nach dem ifs –