recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser des variables dans les instructions SQL en Python ?

<p>J'ai le code Python suivant : </p> <pre class="brush:py;toolbar:false;">cursor.execute("INSERT INTO table VALUES var1, var2, var3,") ≪/pré> <p>Où <code>var1</code> est un entier, <code>var2</code> et <code>var3</code> </p> <p>Comment écrire des noms de variables en Python sans qu'ils soient inclus dans le texte de la requête ? </p>
P粉200138510P粉200138510540 Il y a quelques jours585

répondre à tous(2)je répondrai

  • P粉545682500

    P粉5456825002023-08-21 13:22:44

    Différentes implémentations de Python DB-API autorisent différents espaces réservés, vous devez donc savoir lequel vous utilisez -- par exemple (en utilisant MySQLdb) :

    cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))

    Ou (en utilisant sqlite3 de la bibliothèque standard Python) :

    cursor.execute("INSERT INTO table VALUES (?, ?, ?)", (var1, var2, var3))

    ou autre chose (dans VALUES之后你可以有(:1, :2, :3),或者"命名样式"(:fee, :fie, :fo)或者(%(fee)s, %(fie)s, %(fo)s),在execute的第二个参数中传递一个字典而不是一个映射)。检查你正在使用的DB API模块中的paramstylestring constantes, et recherchez paramstyle sur http://www.python.org/dev/peps/pep-0249/ pour tous les styles de passage de paramètres !

    répondre
    0
  • P粉926174288

    P粉9261742882023-08-21 10:38:41

    cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))

    Notez que l'argument est passé sous forme de tuple, (a, b, c)。如果你只传递一个参数,元组需要以逗号结尾,(a,).

    L'API de la base de données échappera et citera correctement les variables. Veuillez faire attention à ne pas utiliser d'opérateurs de formatage de chaîne (%) car

    1. Il ne permet ni évasion ni citation.
    2. Il est vulnérable aux attaques de formatage de chaîne incontrôlables telles que injection SQL.

    répondre
    0
  • Annulerrépondre