Forum Programmation.SQL problème récupération valeur formulaire

Posté par . Licence CC by-sa.
Tags : aucun
2
24
mai
2019

Bonjour à tous,

Je réalise un petit site perso et j'ai un problème de syntaxe vraisemblablement sur le "%d", d'après le terminal de commande.

Mon code:

    @app.route('/sites_de_plongees', methods=['POST'])
    def after_form():
        parametres_sites(request.form['site'])
        return render_template('after_form.html',para=parametres_sites(request.form['site']))

   def parametres_sites(site):
    # Try to connect to an existing database
    print('Trying to connect to the database')
    try:
      connection = sqlite3.connect("base.db")
      print('Connected to the database')
      cursor = connection.cursor()
      command = 'select * from parametres_site join Sites_de_plongees on Sites_de_plongees.Id=parametres_site.Id where parametres_site.Id=**%d**'

      print('Trying to execute command: ' + command + ' with %s=')
      try:
        cursor.execute(command,[site])
        print("execute ok")
        rows = cursor.fetchall()
        print("fetchall ok")
        return rows

        cursor.close()
        connection.close()
        print('Returning page ' + page)
        return page
      except Exception as e :
        return "error when running command: " + command + " : " + str(e)
    except Exception as e :
      return "Cannot connect to database: " + str(e)

Et l'affichage:

  {% for I in para %}

  <div class="w3-bar-item">{{I}}
  </div><br>

  {% endfor %}
  </fieldset>

Pourriez-vous m'aider ?

Merci d'avance :)

  • # Mise en forme

    Posté par . Évalué à 2 (+0/-0). Dernière modification le 24/05/19 à 19:04.

    Je me suis permis une retouche de mise en forme.

    Quand tu écris un message (forum, commentaire), il y a une aide tout en bas de la page qui décrit quelques commandes pour formatter le texte.

    Pour du code python , tu peux utiliser :

    ```python

    #ton code python

    ```

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Mise en forme

      Posté par . Évalué à 1 (+0/-0). Dernière modification le 25/05/19 à 13:42.

      Merci à toi :)

      Au fait, j'oubliais le formulaire:

      <form method="post" action="{{url_for('after_form') }}" >
       <fieldset>
         <ul>
      
         <p>
           Sélectionnez le site de plongée:
         <select class = "w3-button w3-large w3-border"
         type="text" name="site" placeholder="Sélectionnez la région">
         <option value="">-- nom du site --</option>
           {% for mots in mots %}
           <option value="{{ mots }}">{{ mots[0] }}</option>
           {% endfor %}
         </select>
      
      
           <i class="w3-margin-left fa fa-search w3-btn w3-red fa w3-bar-item w3-button">
                 <input class=" w3-button w3-large" type= "submit" value="Valider" ></i>
             </p>
      </fieldset>
      </form>

      Merci d'avance !

      • [^] # Re: Mise en forme

        Posté par . Évalué à 2 (+0/-0).

        Du coup pour le formulaire tu peux utiliser ```html qui est plus adapté (j'ai corrigé également :) ).

        En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: Mise en forme

        Posté par . Évalué à 1 (+0/-0). Dernière modification le 25/05/19 à 15:58.

        et la ?

        command = 'select * from parametres_site join Sites_de_plongees on Sites_de_plongees.Id=parametres_site.Id where parametres_site.Id=**%d**' % site

        pareil pour la ligne du dessous, le %s est substitué par quoi ?

        print('Trying to execute command: ' + command + ' with %s=')
        • [^] # Re: Mise en forme

          Posté par . Évalué à 1 (+0/-0).

          Merci de ta réponse, j'ai donc essayé ce que tu m'as suggéré et j'ai le message d'erreur suivant:

          "A number is requested, not unicode", alors que j'ai pourtant l'impression de lui passer en paramètre un nombre… Pourriez-vous m'aider ? :) Merci et bonne journée!

          def parametres_sites(site):
              # Try to connect to an existing database
              print('Trying to connect to the database')
              try:
                connection = sqlite3.connect("base.db")
                print('Connected to the database')
                cursor = connection.cursor()
                command = 'select * from parametres_site join Sites_de_plongees on Sites_de_plongees.Id=parametres_site.Id where parametres_site.Id=**%d**' % site
          
          
                try:
                  cursor.execute(command,)
                  print("execute ok")
                  rows = cursor.fetchall()
                  print("fetchall ok")
                  return rows
          
                  cursor.close()
                  connection.close()
                  print('Returning page ' + page)
                  return page
                except Exception as e :
                  return "error when running command: " + command + " : " + str(e)
              except Exception as e :
                return "Cannot connect to database: " + str(e)
          • [^] # Re: Mise en forme

            Posté par . Évalué à 1 (+0/-0).

            Tu peux aussi laisser python se débrouiller pour la mise en forme:

            command = 'select * from parametres_site join Sites_de_plongees on Sites_de_plongees.Id=parametres_site.Id where parametres_site.Id=**{}**'.format(site)
            • [^] # Re: Mise en forme

              Posté par . Évalué à 1 (+0/-0).

              Merci, ça semble mieux fonctionner mais il y a maintenant un problème dans la création de la base de données :(

              Syntax error near n"*":

              (3,)

              Quand je passe le "3" dans le formulaire, il me le réutilise bien mais l'encodage semble mauvais, j'ai ça à la place d'avoir juste "3"…

              Pourriez-vous m'aider ?

              Merci

  • # Structure base

    Posté par . Évalué à 1 (+0/-0).

    Si ça peut aider, la structure de la base de données :)

    Merci :)

    https://ibb.co/G7XhdfP
    https://ibb.co/T2ZVP3K
    https://ibb.co/qJC0PMD

  • # parametres ?

    Posté par (page perso) . Évalué à 3 (+1/-0).

    Hello, comme ça les yeux fermé, j'ai un sérieux doute sur le %d
    la doc parle de simple '?'

    t = ('RHAT',)
    c.execute('SELECT * FROM stocks WHERE symbol=?', t)
    print c.fetchone()

    donc ici je dirais :

     command = 'select * from parametres_site join Sites_de_plongees on Sites_de_plongees.Id=parametres_site.Id where parametres_site.Id=?'
    cursor.execute(command,[site])
    • [^] # Re: parametres ?

      Posté par . Évalué à 1 (+0/-0).

      Merci de ta réponse :)

      En revanche ça ne fonctionne toujours pas :(

      Lorsque je fait un "print command" il ne remplace pas le "?", et du coup les lignes sont vides.

      Une idée ?

      Merci :)

  • # résolu :)

    Posté par . Évalué à 1 (+0/-0).

    Bonjour,

    Je m'en suis enfin sorti, merci à vous pour vos commentaires :)

    J'ai fait un mix de vos 2 suggestions et hop, ça a fonctionné :)

    command = 'select * from parametres_site where parametres_site.Id=?'.format(site)

    J'ai une autre question, comment puis-je héberger en ligne ma petite appli avec la base de données DB browser ?

    Merci encore :)

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.