Sqlite3.OperationalError: too many attached databases - max 10
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 relié plusieurs base de donnée en python avec sqlite et cela m'a provoqué une erreur
sqlite3.OperationalError: too many attached databases - max 10.
D'après le documentation, le nombre de base de donnée attaché est limité à 10 est qu'on peut définir ce limite à >10 avec sqlite3_limit(db,SQLITE_LIMIT_ATTACHED,size). Mais le problème c'est que je ne sais pas comment mettre en pratique ce code, est j'ai beau chercher partout mais je n'ai pas trouvé un exemple d'utilisation. Pouvez vous m'aider s'il vous plaît. Voici mon code
Cordialement.
J'ai relié plusieurs base de donnée en python avec sqlite et cela m'a provoqué une erreur
sqlite3.OperationalError: too many attached databases - max 10.
D'après le documentation, le nombre de base de donnée attaché est limité à 10 est qu'on peut définir ce limite à >10 avec sqlite3_limit(db,SQLITE_LIMIT_ATTACHED,size). Mais le problème c'est que je ne sais pas comment mettre en pratique ce code, est j'ai beau chercher partout mais je n'ai pas trouvé un exemple d'utilisation. Pouvez vous m'aider s'il vous plaît. Voici 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,4,5,6,7,8,9,10,11,12,.....
connection1.execute("ATTACH Database 'mabase1.esd' as db1")
connection1.execute("ATTACH Database 'mabase2.esd' as db2")
connection1.commit()
#Fermeture de la connexion
connection1.close()
Cordialement.
2 réponses
-
Bonjour.
J'ai fait quelques recherches, dans l'api sqlite de python, il y a bien une méthode Connection.set_limit, malheureusement celle-ci n'est disponible qu'avec les bonnes options fournies lors de la compilation de sqlite...
Mais quel intérêt de vouloir aggréger autant de bases ?
Tu pourrais les attacher, faire tes manipulations, puis les détacher.
J'ai un peu testé, et ça fonctionne très bien.
En prenant pour pseudo base ce que tu as effectué dans ton précédent sujet, voici un simple exemple (nécessite un répertoire "databases").
import sqlite3 def create_table(db_name, values): con = sqlite3.connect("./databases/%s.db" % db_name) cur = con.cursor() cur.execute( '''CREATE TABLE fournisseurs( id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT )''' ) s = ','.join(('(?)',) * len(values)) cur.execute('INSERT INTO fournisseurs(nom) VALUES %s' % s, values) con.commit() con.close() def tables_dif(main_db_name, *db_names): con = sqlite3.connect(":memory:") con.execute("ATTACH DATABASE './databases/%s.db' AS main_db" % main_db_name) cur = con.cursor() res = {} for db_name in db_names: con.execute("ATTACH DATABASE './databases/%s.db' AS db" % db_name) sql = ''' SELECT t2.id, t2.nom FROM db.fournisseurs as t2 LEFT JOIN main_db.fournisseurs as t USING(nom) WHERE t.nom IS NULL ''' cur.execute(sql) res[db_name] = cur.fetchall() con.execute("DETACH DATABASE db") con.close() return res try: create_table('main', ('jojo', 'mimi', 'riri')) create_table('base1', ('jojo', 'riri', 'vévé')) create_table('base2', ('riri', 'lulu')) except: pass print(tables_dif('main', 'base1', 'base2')) -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, tu atteins la limite avec 2 bases?