Comparaison des données dans des bases différentes [Résolu]

Messages postés
94
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
16 octobre 2019
- - Dernière réponse : rasielblas
Messages postés
94
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
16 octobre 2019
- 28 sept. 2019 à 09:01
Bonjour,


J'ai trois base de donnée(mabaseTotal,base1,base2) avec sqlite et avec python j'ai fusionné ces bases. Le base 1 contient le total de l'enregistrement de base 2 et base 3 et ce que je veux c'est comparer l'enregistrement et afficher le résultat que si un donnée de la base2 ou base3 ne se trouve pas dans la base total alors on affiche l'enregistrement manquante. J'espère que vous avez compris mon explication, voici le bout de mon code:

import sqlite3
import os

#Création de la connexion
connection1 = sqlite3.connect("mabaseTotal.esd")
connection2 = sqlite3.connect("mabase1.esd")
connection3 = sqlite3.connect("mabase2.esd")


#Fusion de la base 1,2,3
connection1.execute("ATTACH Database 'mabase1.esd' as db1")
connection1.execute("ATTACH Database 'mabase2.esd' as db2")

#Création des curseurs
cursor1 = connection1.cursor()
cursor2 = connection2.cursor()
cursor3 = connection3.cursor()

#Création des tables

def CreateTable_base1():
    table_base1_exist='CREATE TABLE TotalFournisseur(id INTEGER PRIMARY KEY AUTOINCREMENT, Nom TEXT)'
    if not connection1.execute(table_base1_exist).fetchall():
        connection1.execute(table_base1_exist)

def CreateTable_base2():
    table_base2_exist='CREATE TABLE Fournisseur1(id INTEGER PRIMARY KEY AUTOINCREMENT, Nom TEXT)'
    if not connection2.execute(table_base2_exist).fetchall():
        connection2.execute(table_base2_exist)

def CreateTable_base3():
    table_base3_exist='CREATE TABLE Fournisseur2(id INTEGER PRIMARY KEY AUTOINCREMENT, Nom TEXT)'
    if not connection3.execute(table_base3_exist).fetchall():
        connection3.execute(table_base3_exist)

#Ajout d'enregistrement dans la table

def AddEntry_base1():
    cursor1.execute('INSERT INTO TotalFournisseur (Id,Nom) VALUES (2,"Joseph")')

def AddEntry_base2():
    cursor2.execute('INSERT INTO Fournisseur1 (Id,Nom) VALUES (1,"Joseph")')

def AddEntry_base3():
    cursor3.execute('INSERT INTO Fournisseur2 (Id,Nom) VALUES (1,"Jean")')

#Execution des functions

try: CreateTable_base1()
except: pass
try: AddEntry_base1()
except: pass

try: CreateTable_base2()
except: pass
try:AddEntry_base2()
except: pass

try: CreateTable_base3()
except: pass
try:AddEntry_base3()
except: pass


connection1.commit()
connection2.commit()
connection3.commit()


#Affichage de l'enregistrment des données dans les trois bases
cursor1.execute('select * from main.TotalFournisseur,db1.Fournisseur1,db2.Fournisseur2')

#Affichage des enregistrements
print(cursor1.fetchall())

connection1.commit()
connection2.commit()
connection3.commit()

#Fermeture de la connexion
connection1.close()
connection2.close()
connection3.close()


Cordialement!
Afficher la suite 

1 réponse

Meilleure réponse
1
Merci
Bonjour.

Ta demande porte plus sur le sql que sur python.

En 2 requêtes, on pourrait faire quelque chose comme.

res = []

sql = '''
SELECT t2.Id, t2.Nom
FROM db1.Fournisseur1 as t2
LEFT JOIN main.TotalFournisseur as t
USING(Nom)
WHERE t.Nom IS NULL
'''

cursor1.execute(sql)
res.extend(cursor1.fetchall())
print(res)

sql = '''
SELECT t2.Id, t2.Nom
FROM db2.Fournisseur2 as t2
LEFT JOIN main.TotalFournisseur as t
USING(Nom)
WHERE t.Nom IS NULL
'''

cursor1.execute(sql)
res.extend(cursor1.fetchall())
print(res)


Il y a sans doute moyen de combiner ces deux requêtes en une seule, après est-ce que ça fera gagner quelque chose au niveau perfs, j'en suis pas certain.

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63224 internautes nous ont dit merci ce mois-ci

rasielblas
Messages postés
94
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
16 octobre 2019
-
Ça marche! votre code est impeccable, merci beaucoup, c'est bien ce que je cherche :-)
Commenter la réponse de khrug