Ok donc je ne suis pas très expérimenté en Python.
J'ai le code Python suivant:
cursor.execute("INSERT INTO table VALUES var1, var2, var3,")
où var1
est un entier, var2
& var3
sont des chaînes.
Comment puis-je écrire les noms de variables sans python en les incluant dans le texte de la requête?
%
. En fait, je le dis dans la réponse.%
au lieu d',
entre la chaîne et les variables .. je ne peux pas annuler mon vote pour diverses raisons .. Personnellement, j'aimerais voir des mots comme non sécurisé / attaque, etc. mentionnés dans la description où vous dites don 't use%
..%
opérateur pour formater la chaîne. Ceux%
de la chaîne sont utiliséscursor.execute
directement par , et comme il sait qu'il génère du SQL, il peut faire plus pour vous protéger.Différentes implémentations de l'API DB Python sont autorisées à utiliser différents espaces réservés, vous devrez donc savoir lequel vous utilisez - cela pourrait être (par exemple avec MySQLdb):
ou (par exemple avec sqlite3 de la bibliothèque standard Python):
ou d'autres encore (après
VALUES
vous pourriez avoir(:1, :2, :3)
, ou "styles nommés"(:fee, :fie, :fo)
ou(%(fee)s, %(fie)s, %(fo)s)
où vous passez un dict au lieu d'une carte comme deuxième argument àexecute
). Vérifiez laparamstyle
constante de chaîne dans le module de l'API DB que vous utilisez et recherchez le paramètre de style sur http://www.python.org/dev/peps/pep-0249/ pour voir quels sont tous les styles de passage de paramètres!la source
Plusieurs façons. N'utilisez PAS le plus évident (
%s
avec%
) dans le vrai code, il est ouvert aux attaques .Ici, copier-coller à partir de pydoc de sqlite3 :
Plus d'exemples si vous avez besoin:
la source
http://www.amk.ca/python/writing/DB-API.html
Soyez prudent lorsque vous ajoutez simplement des valeurs de variables à vos instructions: Imaginez un utilisateur se nommant
';DROP TABLE Users;'
- C'est pourquoi vous devez utiliser l'échappement SQL, que Python vous fournit lorsque vous utilisez le curseur.execute de manière décente. Exemple dans l'URL:la source