Relié des bases de donnée sqlite en python [Résolu]

Messages postés
104
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
2 décembre 2019
- - Dernière réponse : rasielblas
Messages postés
104
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
2 décembre 2019
- 23 sept. 2019 à 16:45
Bonjour,

J'ai 3 base de donnée sqlite qui contient chacun des enregistrements, j'aimerais relié ces bases avec python et afficher tous les enregistrements avec une seule requete, ce que je veux c'est faire de la jointure mais pas entre les tables mais cette fois ci avec les bases de données. Voici mon code:

import sqlite3
import os

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

#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 Clients(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 Fournisseur(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 Magasin(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 Clients (Id,Nom) VALUES (1,"Jean")')

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

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

#Execution des functions

try: CreateTable_base1()
except: pass
AddEntry_base1()


try: CreateTable_base2()
except: pass
AddEntry_base2()


try: CreateTable_base3()
except: pass
AddEntry_base3()

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

#Affichage des résultats de la requete
cursor1.execute('SELECT * FROM Clients')
cursor2.execute('SELECT * FROM Fournisseur')
cursor3.execute('SELECT * FROM Magasin')

#Affichage des enregistrements
print(cursor1.fetchall())
print(cursor2.fetchall())
print(cursor3.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
Messages postés
9059
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 décembre 2019
464
1
Merci
bonjour,
pour réaliser cela, je pense que tu dois te connecter à une seule base.
ensuite, utiliser la commande SQL ATTACH pour ajouter les autres bases à la connexion.
connection1.execute('ATTACH DATABASE mabase2.esd AS db2')

et ensuite tu peux préciser le nom de la db dans les requêtes SQL:
cursor1.execute('SELECT * FROM main.Clients, db2.Fournisseur')

Dire « Merci » 1

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

CCM 63343 internautes nous ont dit merci ce mois-ci

rasielblas
Messages postés
104
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
2 décembre 2019
-
Merci de votre réponse, j'ai appliqué votre code est elle trouve bien la table dans la mabase1 mais elle ne trouve pas la table dans la base mabase2, elle me renvoie une erreur:

sqlite3.OperationalError: no such table: db2.Fournisseur

Avait vous une idée? car la table fournisseur se trouve bien dans mabase2 mais qu'elle ne trouve pas!
> rasielblas
Messages postés
104
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
2 décembre 2019
-
Bonjour, utilise des quotes autour du nom de la bdd.

connection1.execute('ATTACH DATABASE "mabase2.esd" AS db2')


Mais, pourquoi faire plusieurs bases ?

Une base de données est censée contenir toutes les tables ayant des relations, ici alors, il n'y a strictement aucun intérêt à vouloir dissocier chacune de ces tables dans des bases différentes et vouloir agglutiner ça en un résultat.
rasielblas
Messages postés
104
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
2 décembre 2019
-
Oui, c'est bien ça, ça fonctionne à merveille, merci beaucoup, en fait c'est pour une comparaison, j'ai trois base de donnée dont le premier contient l'ensemble des enregistrements des deux base de données, et c'est pour faire une comparaison! encore merci pour cette astuce! je marque ce comme résolu!
Commenter la réponse de yg_be