78 votes

Comment puis-je fusionner plusieurs bases de données SQLite ?

Si je possède un grand nombre de bases de données SQLite, toutes avec le même schéma, quelle est la meilleure façon de les fusionner afin d'effectuer une requête sur toutes les bases de données ?

Je sais qu'il est possible d'utiliser ATTACHER pour le faire, mais il a une limite de 32 et 64 bases de données selon le système de mémoire de la machine.

94voto

dfrankow Points 2983

Pour résumer à partir du Poste de travail dans la réponse de DavidM :

attach 'c:\test\b.db3' as toMerge;           
BEGIN; 
insert into AuditRecords select * from toMerge.AuditRecords; 
COMMIT; 
detach toMerge;

Répétez l'opération si nécessaire.

Note : ajouté detach toMerge; selon le commentaire de Mike.

6 votes

Et aussi detach toMerge; après commettre.

3 votes

Cela ne fusionnerait qu'une seule table, je suppose. Comment importer plusieurs tables à la fois, en préservant leur clé étrangère ?

0 votes

J'ai essayé, mais les colonnes de la base de données jointe étaient mal alignées pour une raison quelconque et le résultat était erroné. J'ai donc dû indiquer explicitement les noms des colonnes dans le même ordre dans les instructions INSERT et SELECT.

18voto

DavidM Points 8591

Cela se ferait à la demande, éventuellement plusieurs fois par jour. La façon dont je vois le fonctionnement est la suivante http://sqlite.1065341.n5.nabble.com/Attempting-to-merge-large-databases-td39548.html où les bases de données sont fusionnées en une grande base de données, la requête est effectuée et la grande base de données est supprimée.

0 votes

Yay, linkrot...

8voto

Bien qu'il s'agisse d'un très vieux fil de discussion, cette question est toujours pertinente au regard des besoins actuels en matière de programmation. Je la publie ici car aucune des réponses fournies jusqu'à présent n'est concise, facile et directe. C'est pour le bien des Googlers qui se retrouvent sur cette page. C'est parti pour l'interface graphique :

  1. Télécharger Sqlitestudio
  2. Ajoutez tous vos fichiers de base de données en utilisant l'option Ctrl + O raccourci clavier
  3. Double-cliquez sur chaque fichier db maintenant chargé pour les ouvrir/activer/développer tous.
  4. Partie amusante : il suffit de faire un clic droit sur chacun des tableaux et de cliquer sur Copy Ensuite, allez à la base de données cible dans la liste des fichiers de base de données chargés (ou créez-en une nouvelle si nécessaire) et faites un clic droit sur la base de données cible et cliquez sur Paste

J'ai été stupéfait de constater qu'une tâche aussi ardue pouvait être résolue en utilisant une ancienne technique de programmation appelée "copier-coller".)

1 votes

Je viens d'essayer et il est dit que l'objet existe déjà et qu'il faut entrer un nouveau nom unique ?

1 votes

Ce n'est pas une bonne solution pour des centaines de fichiers... c'est pourquoi nous utilisons les compétences de programmation !

2 votes

@GuillermoOlmedo Le point central de ma réponse a été très clair, à savoir GUI nous allons . J'ai intentionnellement inclus cette phrase. Veuillez noter que.

3voto

Vous pouvez également utiliser un logiciel de comparaison/fusion pour faire le travail. Vous pouvez essayer Comparaison de SQLite Il permet, entre autres, de comparer et de fusionner de grandes tables SQLite.

Bonne chance

Liron

1voto

Espo Points 24318

Si vous n'avez besoin d'effectuer cette opération de fusion qu'une seule fois (pour créer une nouvelle base de données plus grande), vous pourriez créer un script/programme qui bouclera toutes vos bases de données sqlite et insérera ensuite les données dans votre (grande) base de données principale.

3 votes

Avez-vous un exemple du code qui effectuerait cette action ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X