Comment puis-je importer des tables à partir d'une autre base de données en sqlite?

j'ai des bases de données SQLite nommées database1 avec une table t1 et database2 avec une table t2. Je veux importer la table t2. Quelle commande(s) dois-je utiliser?

10
demandé sur gustafbstrom 2012-11-03 10:04:34

3 réponses

Ouvrir database2sqlite3 outil en ligne de commande et lire la définition de la table avec la commande .schema t2. (Alternativement, utilisez tout autre outil qui permet de lire la définition de la table.)

alors ouvrez database1,joindre l'autre base de données avec la commande:

ATTACH 'database2file' AS db2;

puis créer la table t2, et de copier les données sur:

INSERT INTO t2 SELECT * FROM db2.t2;
30
répondu CL. 2012-11-03 10:39:59

commande Shell:

sqlite3 database1

dans la coquille de SQLite:

sqlite> ATTACH 'database2' AS db2;
sqlite> CREATE TABLE t1 AS SELECT * FROM db2.t2;
7
répondu Ivor O'Connor 2016-10-02 05:03:01

Vous pouvez utiliser le sqlite3 .dump commande de pipe la sortie de dump dans l'autre db. Il prend un argument optionnel avec le nom de la table.

db1=~/mydb1.sqlite 
db2=~/mydb2.sqlite
t=t2

sqlite3 "$db2" ".dump $t" | sqlite3 "$db1"

si vous n'avez pas de tables communes dans les deux bases de données, vous pouvez laisser le nom de la table et copier toutes les tables.

si les tables sont grandes, cela peut être lent car il fera INSERTs. Si ils sont énormes, et il est vraiment trop lent, peut-être .import serait plus rapide. Vous pouvez essayer quelque chose comme

sqlite3 "$db2" ".schema $t" | sqlite3 "$db1"
sqlite3 "$db2" "SELECT * FROM $t" | sqlite3 "$db1" ".import /dev/stdin $t"
4
répondu mivk 2012-11-03 10:44:02