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 :(

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top