Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysqldb python s'échappe? ou %s ?

Pour être plus précis ... le cursor.execute() La méthode prend un argument facultatif qui contient des valeurs à mettre entre guillemets et à interpoler dans le modèle/l'instruction SQL. Cela ne se fait PAS avec un simple % opérateur! cursor.execute(some_sql, some_params) n'est PAS identique à cursor.execute(some_sql % some_params)

L'API Python DB spécifie que tout pilote/module conforme doit fournir un .paramstyle attribut qui peut être n'importe lequel de 'qmark', 'numeric', 'named', 'format' ou 'pyformat' ... afin que l'on puisse, en théorie, adapter vos chaînes de requête SQL à la forme prise en charge par l'introspection et un petit muguet. Cela devrait toujours être plus sûr que d'essayer de citer et d'interpoler vous-même des valeurs dans vos chaînes SQL.

J'ai été particulièrement amusé de lire Attention Ne jamais, jamais, JAMAIS utiliser Python chaîne ... interpolation ... Pas même sous la menace d'une arme. dans la documentation de PsychoPG.