MySQL Datenbank :an die Abfrage übergebene doppelte Anführungszeichen
-
13-12-2019 - |
Frage
Ich werde verrückt nach MySQLdb!Ich folge genau dem offiziellen Dokument, aber ich habe einen Fehler mit dem Code :
DB_TABLE = "test"
cursor.execute("SELECT MAX(id) AS maxid FROM " + DB_TABLE)
print "***"
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , (DB_TABLE,))
Ich bekomme den Fehler :
Traceback (most recent call last):
File "dbscript.py", line 49, in <module>
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , (DB_TABLE,))
File "build/bdist.macosx-10.7-intel/egg/MySQLdb/cursors.py", line 174, in execute
File "build/bdist.macosx-10.7-intel/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test'' at line 1")
Offensichtlich gibt es ein Problem mit einigen Zitaten.Mein Befehl scheint eine Zeile wie diese an MySQL zu senden :
SELECT MAX(id) AS maxid FROM ''test''
Wie kann ich das doppelte Anführungszeichen durch ein einzelnes ändern?
Ich habe Folgendes ausprobiert :
DB_TABLE = 'test'
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , [DB_TABLE])
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , ("test",))
Aber nichts funktioniert :(
Lösung
cursor.execute("SELECT MAX(id) AS maxid FROM %s" , ("test",))
und in ähnlichen Aussagen, die cursor.execute
ersetzt SQL-Parameter in %s.
Was du brauchst, ist so etwas
sql = "SELECT MAX(id) AS maxid FROM %s" % ("test", )
cursor.execute(sql)
Andere Tipps
Sie können den Namen des Tabellens nicht parametrierter, sodass Sie es selbst erdanken und stattdessen Stringersubstitution in der Abfrage verwenden.
bis sanitize einen Tabellennamen in einer Abfrage mit mehreren Parametern:
generasacodicetagpre.An diesem Punkt wird Abfrage angezeigt:
generasacodicetagpre.Wenn Sie Ihren Cursor aufgebaut haben, verwenden Sie den parametrierten Zustand:
generasacodicetagpre.Die tatsächliche Abfrage, in der MySQL eingelesen wird, ist:
generasacodicetagpre.Wenn Sie versuchen, einen Tabellennamen ohne Desingen zu übergeben, erhalten Sie einen Syntaxfehler.