89 votes

Requêtes paramétrées MySQL

J'ai du mal à utiliser le module MySQLdb pour insérer des informations dans ma base de données. J'ai besoin d'insérer 6 variables dans le tableau.

cursor.execute ("""
    INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
    VALUES
        (var1, var2, var3, var4, var5, var6)

""")

Quelqu'un peut m'aider avec la syntaxe ?

15voto

Marcel Guzman Points 874

Les documents liés donnent l'exemple suivant :

   cursor.execute ("""
         UPDATE animal SET name = %s
         WHERE name = %s
       """, ("snake", "turtle"))
   print "Number of rows updated: %d" % cursor.rowcount

Il vous suffit donc de l'adapter à votre propre code - par exemple :

cursor.execute ("""
            INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
            VALUES
                (%s, %s, %s, %s, %s, %s)

        """, (var1, var2, var3, var4, var5, var6))

(Si SongLength est numérique, vous devrez peut-être utiliser %d au lieu de %s).

7voto

FDS Points 583

Comme alternative à la réponse choisie, et avec la même sémantique sûre que celle de Marcel, voici une façon compacte d'utiliser un dictionnaire Python pour spécifier les valeurs. Il a l'avantage d'être facile à modifier lorsque vous ajoutez ou supprimez des colonnes à insérer :

  meta_cols = ('SongName','SongArtist','SongAlbum','SongGenre')
  insert = 'insert into Songs ({0}) values ({1})'.format(
      ','.join(meta_cols), ','.join( ['%s']*len(meta_cols)))
  args = [ meta[i] for i in meta_cols ]
  cursor = db.cursor()
  cursor.execute(insert,args)
  db.commit()

meta est le dictionnaire contenant les valeurs à insérer. La mise à jour peut se faire de la même manière :

  meta_cols = ('SongName','SongArtist','SongAlbum','SongGenre')
  update='update Songs set {0} where id=%s'.
        .format(','.join([ '{0}=%s'.format(c) for c in meta_cols ]))
  args = [ meta[i] for i in meta_cols ]
  args.append(songid)
  cursor=db.cursor()
  cursor.execute(update,args)
  db.commit()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X