2016-03-21 19 views
0

Ich versuche, einen Feldnamen mit einer Nummer dynamisch zu nennen, die sich ändert. Beispiel Ich habe Hard4, Hard6, Hard8, Hard10 als Felder und möchte sie basierend auf einer Rolle aufrufen. Ich zur Zeit einen Syntaxfehler bekommen und ich kann sowieso nicht zu beheben in von Stackoverflow Suche :(findensqlite Dynamisch Anruf Feldnamen

Jede Hilfe wäre dankbar Code:.!

conn = sqlite3.connect('C:\sqlite\crapsdatabase.db') 
c = conn.cursor() 

die1 = 3 
die2 = 3 

theroll = die1+die2 
if die1 == die2: 
    c.execute("SELECT playerName FROM player WHERE Hard? > 1", (theroll,)) 
    for row in c: 
     for field in row: 
      print(field) 

Fehler:

c.execute("SELECT playerName FROM player WHERE Hard? > 1", (theroll,)) 
sqlite3.OperationalError: near "?": syntax error 

Dies ist mit Python 3, wenn das einen großen Unterschied macht.Ich habe auch versucht, die? In einfache Anführungszeichen setzen ...

Vielen Dank noch einmal für die Suche!

Antwort

1

In diesem Fall wäre es angemessen, die Zeichenfolgenformatierung zu verwenden, entweder die % Art oder die .format() Art.

c.execute("SELECT playerName FROM player WHERE Hard%d > 1" % theroll) 

Beachten Sie, dass Sie sollten nie Zeichenfolge Formatierung verwenden, um SQL-Anweisungen aus Benutzereingaben zu erstellen. Wenn Sie mit Benutzereingaben arbeiten, verwenden Sie immer die ?-typische Parametersubstitution.

+0

Also das man es tat. Der andere Code gab alle Spieler zurück, unabhängig vom Wert des Hard6 Feldes. Der Benutzer wird die Würfelnummer nicht eingeben, aber ein Zufallszahlengenerator wird .... Vielen Dank! – HELPMEPLEASE

0

Der Operator ? wird nicht einfach Text in den SQL-Code eingeben. Intern wird Sqlite zusätzlich eine Bearbeitung vornehmen. Wenn Sie bei Verwendung einer vollständigen SQL-Abfrage im Klartext Fragezeichen um den Text, Escape-Zeichen, setzen, erledigt sqlite dies auch, wenn Sie den Operator ? verwenden.

Sie können stattdessen nur String-Formatierung:

c.execute("SELECT playerName FROM player WHERE %s > 1" % ("Hard%s" % the roll,)) 
+0

Danke, Dron! Dein Code hat aus irgendeinem Grund alle Spieler zurückgegeben, selbst wenn der Einsatz 0 war ... nicht sicher warum! Vielen Dank! – HELPMEPLEASE

+0

Es wurde gemischt und jetzt korrigiert. – dron22