Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Recherche Aléatoire de lignes dans une table !
    Bonjour,
    J'ai un petit soucis pour lire une ligne de table de manière aléatoire.

    Voici mon code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import sqlite3
    import random
     
    conn=sqlite3.connect('baseTaquin.db3')
    cur=conn.cursor()
    # comptage Nombre de lignes d'une table (COUNT(*) ne fonctionnait pas ! j'ai trouvé ce bout de code qui fonctionne)
    #========================================================================
    cur.execute("select * from Articles")
    resultat=cur.fetchall()
    nblignes=len(resultat)
    print (nblignes)
     
    # tirage N° de ligne aléatoire de la table (ce bout de code fonctionne !)
    #===========================================
    alea=random.randint(1,nblignes) 
    print("alea=",alea)
     
    # Recherche du N° de la ligne tirée au hasard (ERREUR ! pourquoi ?)
    #==========================================
    resultat=cur.execute("select * from Articles where IDArticles=alea") # ligne 30
    # print("Id articles","Abrev"," NomC","genre","nombre")
    for row in resultat:
        print(" ",row[0],"        ",row[1],"  ",row[2],"  ",row[3],row[4],"\n")
     
    conn.close()


    MESSAGE d'ERREUR:
    File "G:\PROGRAMMATION\PYTHON\THONNY IDE\MES PROGRAMMES\CrazymoTaquinBDD.py", line 30, in <module>
    resultat=cur.execute("select * from Articles where IDArticles=alea")
    sqlite3.OperationalError: no such column: alea
    Quand je mets un Numéro de ligne à la main, par exemple IDArticles=4, il me sort bien la bonne ligne !
    Pourtant la variable "alea" est bien un entier entre 1 et 7 (7 étant le Nb de lignes de ma table).
    Je ne vois pas où est le problème. J'ai cherché sur internet. Il y a des solutions batardes. Mais elles ne fonctionnent pas !!
    Merci de me dire s'il y a une solution ??
    A BIENTÔT !

  2. #2
    Modérateur

    C'est plutôt un problème python, il faut envoyer votre variable alea dans la requête comme ceci :
    Code python :Sélectionner tout -Visualiser dans une fenêtre à part
    resultat=cur.execute("select * from Articles where IDArticles=?", alea)

  3. #3
    Futur Membre du Club
    Bonjour Waldar !

    La solution que vous m'avez apporté, je l'ai déjà essayé. Je l'ai quand incluse dans mon code pour voir.
    Et j'ai le beau message d'erreur suivant:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "G:\PROGRAMMATION\PYTHON\THONNY IDE\MES PROGRAMMES\CrazymoTaquinBDD.py", line 31, in <module>
        resultat=cur.execute("select * from Articles where IDArticles=?",alea)
    ValueError: parameters are of unsupported type


    Pourquoi le type de la variable (alea) n'est pas supporté ?? c'est un entier comme celui de la colonne IDArticles.

    Je code avec Thonny 3.2.7 et jusqu'à maintenant je n'avais pas de problèmes particuliers.
    Mais, depuis que je travaille avec SQlite3, il y a pas mal d'instructions qui ne fonctionnent pas correctement.
    comme COUNT(*) qui ne retourne pas le nombre de lignes d'une table.

    Je ne vois pas ce que je peux faire ??
    A BIENTÔT ! pour votre éclairage....

  4. #4
    Futur Membre du Club
    Re-Bonjour,

    J'ai trouvé la solution dans le forum de developpez.net par le pseudo: Tyrtamos du 13/4/2012
    lors de son explication sur le codage d'une variable dans un SELECT, sa solution ne me convenait pas.
    Puis deux lignes plus loin, il a montrer un code un peu bizarre entre parenthèses: ,(variable,)
    je l'ai essayé, et ça marche !! Ouf !!
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    resultat=cur.execute("select * from Articles where IDArticles=?",(alea,))


    Je vous remercie quand même pour votre intervention !!
    A BIENTÔT !! Car j'aurais certainement d'autres problèmes....

###raw>template_hook.ano_emploi###