Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Python mysql.connector.errors. %s wurde mit Anführungszeichen an die SQL-Abfrage übergeben

Die Tatsache, dass MySQLPython die Standard-String-Formatmarkierung ("%") für Variablenplatzhalter in Abfragen verwendet, kann die Dinge verwirren.

Die Platzhalter für Abfragen in der db-api von Python sind für Werte verwendet in wo Klauseln und insert und aktualisieren Anweisungen und werden von der db-api ordnungsgemäß gesantisiert / maskiert / in Anführungszeichen gesetzt, um SQL-Injektionen usw. zu vermeiden. Sie sollten nicht für Tabellen- oder Feldnamen verwendet werden.

Was Sie hier also wollen, ist, Ihre Abfrage mit Zeichenfolgenformatierung zu erstellen:

sql =  'SHOW TABLES FROM %s;' % (db_name[0],)
cursor.execute(sql)

Seit db_name[0][code> stammt aus einer vertrauenswürdigen Quelle, hier liegt kein Sicherheitsproblem vor.