Comparaison des données dans des bases différentes
Résolu
rasielblas
Messages postés
143
Statut
Membre
-
rasielblas Messages postés 143 Statut Membre -
rasielblas Messages postés 143 Statut Membre -
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:
Cordialement!
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!
A voir également:
- Comparaison des données dans des bases différentes
- Fuite données maif - Guide
- Trier des données excel - Guide
- Comparaison million milliard - Accueil - Technologies
- Sauvegarde des données - Guide
- Excel validation des données liste - Guide
1 réponse
Bonjour.
Ta demande porte plus sur le sql que sur python.
En 2 requêtes, on pourrait faire quelque chose comme.
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.
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.
rasielblas
Messages postés
143
Statut
Membre
9
Ça marche! votre code est impeccable, merci beaucoup, c'est bien ce que je cherche :-)