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.