le curseur.execute(“INSERT INTO im_entry.test (”+entrym+“) VALUES ('”+p+“');”)
entrym='entry'
entrym=entrym+ str(idx)
cursor.execute("INSERT INTO im_entry.test ("+entrym+") VALUES ('"+p+"');")
Je suis en utilisant une requête de ce type, où entry1
, entry2
etc. sont mes tables de base de données. Le programme n'affiche pas les erreurs, mais le p
valeur n'obtenez pas inséré dans la base de données. Quel est le problème ici? S'il vous plaît aider moi.
OriginalL'auteur Ria | 2011-03-17
Vous devez vous connecter pour publier un commentaire.
Par défaut, psycopg2 commence transactions pour vous automatiquement, ce qui signifie que vous avez à dire de s'engager. Notez que
commit
est une méthode de laconnection
, pas lacursor
.L'intention est que vous pouvez regrouper plusieurs instructions lors d'une transaction unique, de sorte que les autres requêtes de ne pas voir la moitié des changements, mais aussi pour des raisons de performances.
Notez également que vous devez toujours utiliser des espaces réservés, au lieu de concaténer des chaînes.
E. g.:
Sinon vous risquez de vous faire Les attaques par injection SQL possible.
EN im_entry.test (%s) VALUES (%s)", [colname,p]) ou encore
cur.execute("INSERT INTO im_entry.test (entry%s) VALUES (%s)", [idx,p])
on dirait que vous essayez de faire quelque chose de bizarre. Généralement vous insérez toujours les mêmes colonnes à partir d'un seul chemin d'accès du code. C'est un vaste sujet, mais vous devriez regarder dans la normalisation de base de données.
OriginalL'auteur intgr