Copie de données d'une base de données SQLite à une autre

J'ai 2 bases de données SQLite avec des données communes mais à des fins différentes et je voulais éviter de réinsérer des données, donc je me demandais s'il était possible de copier une table entière d'une base de données à une autre?

109
demandé sur cricket_007 2010-03-02 00:30:34

6 réponses

Vous devrez attacher la base de données X avec la base de données Y en utilisant la commandeATTACH , puis exécutez les commandes Insert Into appropriées pour les tables que vous souhaitez transférer.

INSERT INTO X.TABLE SELECT * FROM Y.TABLE;

Ou, si les colonnes ne sont pas appariées dans l'ordre:

INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE;
145
répondu Michael D. Irizarry 2016-03-23 14:10:41

Considérons un exemple où j'ai deux bases de données à savoir allmsa.db et atlanta.DB. Dites la base de données allmsa.db a des tables pour tous les msas aux États-Unis et la base de données atlanta.db est vide.

Notre objectif est de copier la table atlanta de allmsa.db à atlanta.DB.

Étapes

  1. sqlite3 atlanta.db (pour aller dans la base de données atlanta)
  2. joindre allmsa.DB. Cela peut être fait en utilisant la commande ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM; notez que nous donnons le chemin entier de la base de données à attacher.
  3. vérifier la liste de base de données en utilisant sqlite> .databases vous pouvez voir la sortie comme
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /mnt/fastaccessDS/core/csv/atlanta.db                  
2    AM               /mnt/fastaccessDS/core/csv/allmsa.db 
  1. Maintenant, vous arrivez à votre cible réelle. Utilisez la commande INSERT INTO atlanta SELECT * FROM AM.atlanta;

Cela devrait servir votre but.

46
répondu Neeraj Chandak 2017-02-14 20:10:09

Manière la plus simple et correcte sur une seule ligne:

sqlite3 old.db ".dump mytable" | sqlite3 new.db

Clé primaire et les types de colonnes seront conservés.

25
répondu Bernardo Ramos 2017-04-03 16:28:35

Pour une action de temps, vous pouvez utiliser .vidage et .lire.

Vider la table my_table de old_db.sqlite

c:\sqlite>sqlite3.exe old_db.sqlite
sqlite> .output mytable_dump.sql
sqlite> .dump my_table
sqlite> .quit

Lire le vidage dans la new_db.sqlite en supposant que la table n'existe pas

c:\sqlite>sqlite3.exe new_db.sqlite
sqlite> .read mytable_dump.sql

Maintenant, vous avez cloné votre table. Pour ce faire pour toute la base de données, il suffit de laisser le nom de la table dans le .commande dump.

Bonus: les bases de données peuvent avoir différents encodages.

7
répondu Thinkeye 2015-10-28 16:46:09

Code Objective - C pour copier la Table d'une base de données vers une autre base de données

-(void) createCopyDatabase{

          NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
          NSString *documentsDir = [paths objectAtIndex:0];

          NSString *maindbPath = [documentsDir stringByAppendingPathComponent:@"User.sqlite"];;

          NSString *newdbPath = [documentsDir stringByAppendingPathComponent:@"User_copy.sqlite"];
          NSFileManager *fileManager = [NSFileManager defaultManager];
          char *error;

         if ([fileManager fileExistsAtPath:newdbPath]) {
             [fileManager removeItemAtPath:newdbPath error:nil];
         }
         sqlite3 *database;
         //open database
        if (sqlite3_open([newdbPath UTF8String], &database)!=SQLITE_OK) {
            NSLog(@"Error to open database");
        }

        NSString *attachQuery = [NSString stringWithFormat:@"ATTACH DATABASE \"%@\" AS aDB",maindbPath];

       sqlite3_exec(database, [attachQuery UTF8String], NULL, NULL, &error);
       if (error) {
           NSLog(@"Error to Attach = %s",error);
       }

       //Query for copy Table
       NSString *sqlString = @"CREATE TABLE Info AS SELECT * FROM aDB.Info";
       sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error);
        if (error) {
            NSLog(@"Error to copy database = %s",error);
        }

        //Query for copy Table with Where Clause

        sqlString = @"CREATE TABLE comments AS SELECT * FROM aDB.comments Where user_name = 'XYZ'";
        sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error);
        if (error) {
            NSLog(@"Error to copy database = %s",error);
        }
 }
5
répondu avinash 2017-02-14 20:12:12

J'avais besoin de déplacer des données d'une base de données sql server compact vers sqlite, donc en utilisant sql server 2008, vous pouvez faire un clic droit sur la table et sélectionner 'Script Table To', puis 'Data to Insertions'. Copiez les instructions insert supprimez les instructions 'GO' et exécutez-les avec succès lorsqu'elles sont appliquées à la base de données sqlite à l'aide de l'application 'DB Browser for Sqlite'.

0
répondu Michael Gabay 2017-10-26 17:33:38