IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Python Discussion :

Tri de données MySQL


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Tri de données MySQL
    Bonjour,

    Je n'ai pas de très grandes compétences en Python et l'utilisation des bases de données. Habituellement je trouve la solution en cherchant un peu partout dans les forums mais là je reste sans solution... Je vous pose le contexte :

    J'ai une base de donnée MySQL qui reçoit des blocks de données provenant d'un automate. Ces données ne sont rien d'autre que des variables que j'ai crée dans un automate de simulation. Par exemple toutes les 5 secondes j'ai en même temps un block de 10 variables qui est envoyé dans la bdd. Ces données sont formées notamment d'un Id, un nom, une valeur ainsi qu'un horodatage (timestamp).

    Pour facilité la compréhension, enfin je l'espère, je vais appeler mes variables de n°1 à 10.
    Mon objectif est de, par exemple, dés que ma variable n°2 passe à 1 (variable discrète) je puisse récupérer dans la bdd disons toutes les variables 4,6 et 8 qui ont été insérées dans la bdd durant les 5 minutes AVANT l'apparition dans ma bdd de la variable n°2 qui est passé à 1. Ca c'est l'idée générale. Le tout en utilisant Python bien évidemment

    Dans l'idéal y faudrait le faire en temps réel mais je vais me contenter d'essayer de le faire sans déjà.

    J'ai ma connexion avec la bdd d'établie, et je bloque sur comment faire déjà pour sélectionner une plage de données sur un intervalle de 5 min avant l'apparition de ma variable n°2 à 1. En cherchant j'ai vue qu'il y avait quelque chose du genre "SELECT * FROM matable WHERE timestamp BETWEEN '2019-02-21 19:54:27' AND '2019-02-21 19:54:32'" pour la sélection d'une plage de données dans un intervalle de temps mais ça ne me sort pas de valeur...


    Quel serait selon vous le meilleur moyen de programmer ce genre de chose ? Comment lire la bdd à partir de la dernière valeur entrée, détecter la variable cible n°2 qui est passée à 1 et ensuite lui dire "tu lis toutes les variables n°4, 6 et 8 qui sont apparues durant les 5 minutes avant l'apparition de la variable n°2" ?

    J'utilise la commande suivante pour détecter la dernière donnée de ma variable n°2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute("SELECT * FROM matable WHERE variable2 ORDER BY timestamp DESC LIMIT 1")
    Il semble que ça sélectionne bien la dernière variable n°2 qui est passée à 1.

    J'ai par la suite pu prendre le datetime de ma variable n°2 et lui enlever une minute pour par la suite effectuer un BETWEEN au niveau de ma requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute("SELECT valeur FROM matable WHERE Id_Num IN ('Csup','Cinf') AND Horodatage BETWEEN (%s) AND (%s)", (r2,r))
    r et r2 étant les 2 datetime, le résultat ne me donne en fait qu'une valeur de Csup et Cinf qui sont 2 variables que je cherche dans mon intervale de temps. Ces variables sont bien dans la période ciblée mais elles devraient apparaitre plusieurs fois or elles n'apparaissent qu'une fois... Je ne vois pas trop pourquoi.

    Merci par avance pour l'aide que vous me porterez je l'espère!

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai l'impression que tu as plus un problème de SQL que de Python. Peut-être pourrais-tu poser la question en plus dans le forum SQL.

    J'utilise sqlite3 et non mysql, mais certains aspects de tes codes SQL me semblent curieux:

    Par exemple:

    SELECT * FROM matable
    va renvoyer les lignes de la table matable

    WHERE variable2
    là, il devrait y avoir une condition!

    ORDER BY timestamp DESC
    les lignes seront ordonnées avec le temps le plus récent en 1er.

    LIMIT 1
    la liste des lignes renvoyées sera limitée à la 1ère. Mais il faudra traiter le cas où aucune ligne n'est renvoyée

    Par ailleurs, dans la requête suivante, il y a peut-être un problème de prise en compte des variables dans la requête: à voir comment il faut faire dans la doc du pilote mysql de Python. Avec sqlite3, ça ne marcherait pas:
    ...Horodatage BETWEEN (%s) AND (%s)", (r2,r))

    Au cas où, je te donne le lien pour la doc de sqlite3 que je trouve assez claire: https://www.sqlite.org/lang.html

    sqlite3 est beaucoup plus limité que mysql (en plus de ne pas être un serveur), mais la syntaxe SQL devrait être la même pour les requêtes courantes.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut
    Merci Tyrtamos pour ta réponse,

    SELECT * FROM matable
    va renvoyer les lignes de la table matable
    C'est ce que je veux en effet, le principe est que je stock les données (donc les lignes) qui m’intéressent dans un json pour ensuite les envoyer autre part. J'ai mis * mais en réalité je ne selectionnerai que certaines colonnes. Mais ça c'est pas trop un soucis je pense.

    WHERE variable2
    là, il devrait y avoir une condition!
    Oui j'ai mis une condition, WHERE Id_Num IN ('Csup','Cinf') parce qu'en fait je voudrais toutes les lignes dans l'intervalle de temps qui ont pour Id_Num = 'Csup' ou Id_Num = 'Cinf'.

    ORDER BY timestamp DESC
    les lignes seront ordonnées avec le temps le plus récent en 1er.
    C'est effectivement ce que je recherche, je lis la table de façon à ce que dés que je vois la variable2 = 1 je puisse stocker l'ensemble des lignes ciblées 1 minute avant l'apparition de la variable, dans mon json. Ce qui m'interesse c'est de trouver la dernière valeur dans le temps, celles qui ont été mises avant à la rigueur je ne m'en occupe pas car elles ne sont plus d'actualité d'une certaine manière...

    LIMIT 1
    la liste des lignes renvoyées sera limitée à la 1ère. Mais il faudra traiter le cas où aucune ligne n'est renvoyée
    Il y aura toujours une ligne qui sera renvoyée car mon automate envoi un block de 10 variables toutes les 5s je crois, comme c'est ma dernière valeur dans le temps qui m’intéresse je peux me limiter à une valeur. Ce sera forcément la dernière en date qui aura été stockée.

    Je vais mettre le sujet au niveau du MySQL aussi.

Discussions similaires

  1. [MySQL-5.6] tri de donnée mysql
    Par BIGnotor dans le forum MySQL
    Réponses: 13
    Dernier message: 13/11/2015, 15h30
  2. Tri des données provenant d'une requête mysql
    Par scrappilly dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/09/2011, 15h19
  3. connection à base de donnée MYSQL
    Par zouzou_zaza dans le forum Bases de données
    Réponses: 11
    Dernier message: 04/07/2004, 12h31
  4. XML->Base de donnée Mysql
    Par lheureuxaurelie dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 10/03/2004, 23h47
  5. [CR9] Tri de données
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 24/07/2003, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo