Comment utiliser des variables pour exécuter des instructions SQL en Python
P粉725827686
P粉725827686 2023-08-21 16:40:37
0
2
475
<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 puis-je écrire des noms de variables sans que Python les intègre au texte de la requête ? </p>
P粉725827686
P粉725827686

répondre à tous(2)
P粉781235689

Différentes implémentations 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 d'autres manières (dans VALUES之后,你可以使用(:1, :2, :3),或者使用"named styles" (:fee, :fie, :fo) 或者 (%(fee)s, %(fie)s, %(fo)s),在这种情况下,你需要将一个字典作为第二个参数传递给execute函数)。检查你正在使用的DB API模块中的paramstyleconstantes de chaîne, et consultez paramstyle sur http://www.python.org/dev/peps/pep-0249/pour toutes les façons de transmettre des paramètres !

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

Veuillez noter que les paramètres sont transmis sous forme de tuple, (a, b, c)。如果您只传递一个参数,元组需要以逗号结尾,(a,).

L'API de la base de données échappera et citera correctement les variables. Faites 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.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal