2016-12-11 1 views
0

Warum erhalte ich eine Fehlermeldung?Was bedeutet die Fehlermeldung 'Nicht alle Argumente, die während der Formatierung von Zeichenfolgen konvertiert wurden'?

mein Code:

from flask import Flask, render_template, g, request, url_for 
import sqlite3 

app = Flask(__name__) 
app.database = 'cc.db' 

def connect_db(): 
    return sqlite3.connect(app.database) 

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    posts = "0" 
    if request.method =='POST': 
     name = request.form['nm'] 
     g.db = connect_db() 
     cur = g.db.execute('SELECT * FROM sols WHERE name LIKE '%'', str(name,)) 
     posts = [dict(name=row[0], color=row[1], size=row[2], location=row[3]) for row in cur.fetchall()] 
     g.db.close() 

    return render_template('index.html', posts=posts) 

if __name__=='__main__': 
    app.run() 

Ich versuche, eine Funktion zur automatischen Vervollständigung mit Jquery zu tun. Zuallererst muss ich auf die db zugreifen. Ich kann nicht herausfinden, was das Problem verursacht.

Antwort

3

Sie haben Ihre Angebote falsch angegeben. Im Folgenden ist nicht eine Saite:

'SELECT * FROM sols WHERE name LIKE '%'' 

, die von dem % Operator getrennt zwei Strings ist.

Sie Python bitten den % Operator auf 'SELECT * FROM sols WHERE name LIKE ' und % auf Strings zu verwenden, führen eine String Interpolation. Da es keinen Platzhalter gibt, um in zu interpolieren, aber Sie haben einen Wert zu interpolieren (die leere Zeichenkette), erhalten Sie Ihren Fehler.

Sie würden Doppel Anführungszeichen verwenden müssen oder die eingebetteten Anführungszeichen zu entkommen:

"SELECT * FROM sols WHERE name LIKE '%'" 

Aber jetzt Sie keine SQL-Parameter Platzhalter haben. Sie müssten Ihre % Wildcard auf den Wert hinzuzufügen und einen Platzhalter wie folgt zu verwenden:

cur = g.db.execute('SELECT * FROM sols WHERE name LIKE ?', (name + '%',)) 

Hier die ? wird durch den ersten Parameter ersetzt werden, die dem name Parameter mit einem % SQL Wildcard gesetzt wird angefügt auf. Der Datenbanktreiber kümmert sich darum, diese Zeichenfolge richtig zu zitieren.

+0

oder Verwendung Zeichenfolge zu entkommen: 'SELECT * FROM Solen WHERE name LIKE \' % \‘ ' –

+0

@ horst666: * oder die eingebetteten Anführungszeichen * entkommen. –

+0

Vielen Dank das hilft mir! –

Verwandte Themen