Comparaison des données dans des bases différentes

Résolu/Fermé
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 26 sept. 2019 à 08:59
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 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!

1 réponse

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.
1
rasielblas Messages postés 140 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
28 sept. 2019 à 09:01
Ça marche! votre code est impeccable, merci beaucoup, c'est bien ce que je cherche :-)
0