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

Django Python Discussion :

Gestion des doublons avec une precision microsecondes [Python 2.X]


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut Gestion des doublons avec une precision microsecondes
    Hello,
    Je bloque depuis quelques temps sur un problème qui me semble venir de Django.
    Pour faire court, je travail dans une société de bourse et tout les jours je reçois tous les ordres passés de la veille sous format CSV généré par un logiciel de passage d'ordre.
    Sauf que le logiciel de passage d'ordre émet parfois des doublons qui ne sont différenciable que par leurs datetimes à la microseconde près.
    Mon code se présente comme suit :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    for i, l in enumerate(lines[1:], 2):
     
                attrs = l.split(";")
                data = dict(zip(CSV_HEADERS, attrs))
     
                unique_ref = data["Transaction Reference Number"]
                arm_line, c = ArmLine.objects.get_or_create(transaction_reference_number = unique_ref)
     
                logger.debug("Parsing line no.%s, creation: %s" % (i, c))
     
                arm_line.errors = ""
                arm_line.status = 0
                arm_line.index = i
                arm_line.raw_line = l
                arm_line.report = self.report
     
                arm_line.import_dict(data)
                arm_line.full_clean()
                arm_line.save()
     
                # remove dups
                if self.filename[9:12] == 'SOM':
     
                    dups = ArmLine.objects.filter(report = self.report,
                                              side = arm_line.side,
                                              quantity = arm_line.quantity,
                                              price = arm_line.price,
                                              security_id = arm_line.security_id,
                                              trading_date_time = arm_line.trading_date_time)
    		dups = dups.exclude(transaction_reference_number = arm_line.transaction_reference_number)
                    if dups:
                        logger.warn("Removing duplicate %s" % dups)
                    dups.delete()
     
            # update indexes, dups messed them up
            for i, arm_line in enumerate(self.report.lines.all().order_by('index'), 2):
                arm_line.index = i
                arm_line.save()
     
     
            # update files on disk
            self.report.write()
    dups étant les doublons, la suppression fonctionne bien sauf que problème : le champ "trading_date_time" étant l'heure à laquelle l'ordre a été passé à la microseconde près n'est pris en compte que jusqu'a la seconde près et par conséquent, des ordres qui ne sont pas sensé être doublon sont supprimé.
    Je sais pas si j'ai été claire dans mon explication, j'en apporterais d'avantage si besoin.
    C'est un problème qui devient de plus en plus urgent car je suis actuellement obligé de traiter les doublons à la main ce qui me prends énormément de temps.
    Je précise que je suis en Python 2.7.9 et en Django 1.9.13.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 787
    Par défaut
    Salut,

    Citation Envoyé par Zetsuk0 Voir le message
    le champ "trading_date_time" étant l'heure à laquelle l'ordre a été passé à la microseconde près n'est pris en compte que jusqu'a la seconde près et par conséquent, des ordres qui ne sont pas sensé être doublon sont supprimé.
    Déjà, il faut vous assurer que l'information existe dans le CSV, puis qu'elle est bien récupérée dans arm_line et qu'elle a été correctement stockée en base... Car vous passez d'une chaîne de caractères a des nombres flottants et des conversions via des formats pas forcément ad hoc à chaque étape.
    Puis une fois que vous aurez trouvé où çà pêche... il faudra éventuellement comprendre pourquoi.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Citation Envoyé par wiztricks Voir le message

    Déjà, il faut vous assurer que l'information existe dans le CSV, puis qu'elle est bien récupérée dans arm_line et qu'elle a été correctement stockée en base... Car vous passez d'une chaîne de caractères a des nombres flottants et des conversions via des formats pas forcément ad hoc à chaque étape.
    Puis une fois que vous aurez trouvé où çà pêche... il faudra éventuellement comprendre pourquoi.

    - W
    Tout d'abord merci pour t'a réponse rapide.

    Les informations dans le CSV existent bien, en voici un exemple : Nom : Ordre.PNG
Affichages : 202
Taille : 7,2 Ko
    Elles sont ensuite bien stocké dans arm_line ainsi que dans la base de donnée.
    J'ai testé un affichage du trading_date_time de arm_line lors de l'import du CSV et les microsecondes y sont bien affiché.

    PS : Je débute dans l'univers Python/Django

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 787
    Par défaut
    Salut,

    Si les informations sont là, soit vous dites : "filter" ne retourne pas les mêmes lignes que son SELECT équivalent (et vous avez trouvé un bug), soit le SELECT retourne la même chose que filter (et ce n'est plus un soucis Django mais dans le modèle de données ou le SGDB).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2019
    Messages : 6
    Par défaut
    Ok je viens d'essayer un SELECT après l'insertion des données, chose que je ne faisait pas car j'affichais uniquement les dates de l'objet directement lors de l'insertion (pas taper ) Nom : datetime line.PNG
Affichages : 194
Taille : 2,3 Ko donc les microsecondes ne sont pas stocké dans la base SQL.
    Mais du coup je tombe des nues car l'attribue possède bien les microsecondes à l'insertion de la BDD et le champ trading_date_time est bien en datetime Nom : desc datetime.PNG
Affichages : 198
Taille : 1,3 Ko

    Je suis sous mysql 14.14

    Il y a t-il quelque chose que j'ai omis ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 787
    Par défaut
    Citation Envoyé par Zetsuk0 Voir le message
    Il y a t-il quelque chose que j'ai omis ?
    C'est tout bon.
    Maintenant, il faut savoir si c'est Django qui ne stocke pas les microsecondes parce qu'il croit que le SGDB ne le supporte pas ou si c'est un soucis côté SGDB (qui les jette).

    Et là, il faut chercher sur Internet des problèmes semblables et essayer de comprendre s'ils s'appliquent ou pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Procédure stockée : gestion des doublons dans une table
    Par Mothership dans le forum Administration
    Réponses: 4
    Dernier message: 22/07/2009, 11h29
  2. [Toutes versions] Gestion des doublons dans une liste technique.
    Par Lorenzogazier dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 02/04/2009, 22h45
  3. Gestion des évènements avec une superposition d'éléments
    Par Meardon dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/10/2008, 14h47
  4. rajouter des doublons avec une macro dans une colonne
    Par Banel dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/08/2008, 23h58
  5. [J2EE/JSP] Gestion des erreurs avec une base SQL server 2005
    Par critok dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/04/2006, 16h57

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