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

Python fordert String-Codierung heraus

Sie sollten .format() nicht verwenden um Werte in eine SQL-Abfrage aufzunehmen. Verwenden Sie stattdessen SQL-Parameter:

sql += " WHERE provider IN ({}) GROUP BY date ORDER BY date ASC".format(', '.join(['%s'] * len(providers)))

cursor.execute(sql, providers)

wobei providers ist die ursprüngliche Liste.

Die Idee ist, eine SQL-Abfrage mit dem in zu generieren Testen Sie mit der SQL-Parametersyntax, die der Anzahl der Anbieter in Ihrer Liste entspricht:WHERE provider in (%s, %s) ... für eine Liste mit zwei Anbietern. Ja, die MySQLdb-Sql-Parametersyntax spiegelt die alte Python-Formatierungssyntax wider, ist aber nicht dasselbe.