Relié des bases de donnée sqlite en python

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

1 réponse

yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
Modifié le 23 sept. 2019 à 12:46
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')
1
rasielblas Messages postés 135 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
23 sept. 2019 à 14:33
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!
0
cpamafote > rasielblas Messages postés 135 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021
23 sept. 2019 à 16:28
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.
0
rasielblas Messages postés 135 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 9
23 sept. 2019 à 16:45
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!
0