Abrir archivo de base de datos desde el shell de línea de comandos SQLite

92

Estoy usando el Shell de línea de comandos SQLite . Como se documenta, puedo abrir una base de datos proporcionándola como argumento al ejecutable:

sqlite3 data.db

No puedo averiguar cómo abrir un archivo de base de datos desde dentro de la herramienta después de haberlo invocado sin proporcionar el archivo como un argumento de línea de comandos (si, por ejemplo, hago doble clic en sqlite3.exe en Windows). ¿Cuál es el comando dentro de la herramienta de shell SQLite para especificar un archivo de base de datos?

Nolan Amy
fuente

Respuestas:

112

Puede adjuntar una e incluso más bases de datos y trabajar con ellas de la misma manera que usa sqlite dbname.db

sqlite3
:
sqlite> attach "mydb.sqlite" as db1;

y puedes ver todas las bases de datos adjuntas con .databases

donde de manera normal se usa main para la línea de comandos db

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite                                   
hormiga
fuente
14
¡Ah! Gracias. ¿Cómo especifico en qué base de datos quiero que sqlite ejecute mis consultas?
Nolan Amy
¿Es normal que surja un conjunto de datos temporal sin haber sido creado?
Usted especifica la base de datos prefijando el nombre de la tabla con el nombre de la base de datos. En el ejemplo anterior, el prefijo sería "db1", por ejemploSELECT * FROM db1.tbl1;
bugmenot123
20

Creo que la forma más sencilla de abrir una sola base de datos y comenzar a consultar es:

sqlite> .open "test.db"
sqlite> SELECT * FROM table_name ... ;

Aviso: esto solo funciona para las versiones 3.8.2+

rindeal
fuente
11

El comando dentro del shell Sqlite para abrir una base de datos es .open

La sintaxis es,

sqlite> .open dbasename.db

Si se trata de una nueva base de datos que le gustaría crear y abrir, es

sqlite> .open --new dbasename.db

Si la base de datos existe en una carpeta diferente, la ruta debe mencionarse así:

sqlite> .open D:/MainFolder/SubFolder/...database.db

En el shell de comandos de Windows, debe usar '\' para representar un directorio, pero en SQLite los directorios están representados por '/'. Si aún prefiere usar la notación de Windows, debe usar una secuencia de escape para cada '\'

Ammu
fuente
9

De la misma manera que lo hace en otro sistema de base de datos, puede usar el nombre de la base de datos para identificar tablas con nombres dobles. Los nombres de tabla únicos se pueden utilizar directamente.

select * from ttt.table_name;

o si el nombre de la tabla en todas las bases de datos adjuntas es único

select * from my_unique_table_name;

Pero creo que el de sqlite-shell es solo para búsqueda manual o manipulación manual de datos y, por lo tanto, de esta manera es más intrascendente

normalmente usaría sqlite-command-line en un script

hormiga
fuente
¿Es posible tener una declaración de selección que obtenga registros de todas las bases de datos adjuntas, en caso de que el nombre de la tabla sea el mismo en todas las bases de datos adjuntas?
user826955
5

Simplemente puede especificar el nombre del archivo de la base de datos en la línea de comando:

bash-3.2 # sqlite3 UserDb.sqlite
SQLite version 3.16.2 2017-01-06 16:32:41
Enter ".help" for usage hints.

sqlite> .databases
main: /db/UserDb.sqlite

sqlite> .tables
accountLevelSettings  genres               syncedThumbs
collectionActivity    recordingFilter      thumbs
contentStatus         syncedContentStatus 

sqlite> select count(*) from genres;
10

Además, puede ejecutar su consulta desde la línea de comando:

bash-3.2 # sqlite3 UserDb.sqlite 'select count(*) from genres'
10

Puede adjuntar otro archivo de base de datos desde el shell SQLite:

sqlite> attach database 'RelDb.sqlite' as RelDb;

sqlite> .databases
main: /db/UserDb.sqlite
RelDb: /db/RelDb_1.sqlite

sqlite> .tables
RelDb.collectionRelationship  contentStatus               
RelDb.contentRelationship     genres                      
RelDb.leagueRelationship      recordingFilter             
RelDb.localizedString         syncedContentStatus         
accountLevelSettings          syncedThumbs                
collectionActivity            thumbs                      

Las tablas de esta segunda base de datos serán accesibles mediante el prefijo de la base de datos:

sqlite> select count(*) from RelDb.localizedString;
2442

Pero, ¿quién sabe cómo especificar varios archivos de base de datos desde la línea de comando para ejecutar la consulta desde la línea de comando?

Alexander Gavriliuk
fuente
2
create different db files using
      >sqlite3 test1.db
sqlite> create table test1 (name text);
sqlite> insert into test1 values('sourav');
sqlite>.exit
      >sqlite3 test2.db
sqlite> create table test2 (eid integer);
sqlite> insert into test2 values (6);
sqlite>.exit
      >sqlite
SQLite version 3.8.5 2014-06-04 14:06:34
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test1.db
sqlite> select * from test1;
sourav
sqlite> .open test2.db
sqlite> select * from test1;
Error: no such table: test1
sqlite> select * from test2;
6
sqlite> .exit
      >

Thank YOU.
Sourav Ghadai
fuente
2

Los shells de línea de comandos de SQLite más antiguos ( sqlite3.exe) no parecen ofrecer el .opencomando ni ninguna alternativa fácilmente identificable.

Aunque no encontré una referencia definitiva, parece que el .opencomando se introdujo alrededor de la versión 3.15 . El historial de versiones de SQLite menciona por primera vez el .opencomando con 2016-10-14 (3.15.0).

ScottWelker
fuente
1

Me pregunto por qué nadie pudo entender lo que realmente planteaba la pregunta. Declaró ¿Cuál es el comando dentro de la herramienta de shell SQLite para especificar un archivo de base de datos?

Una base de datos sqlite está en mi disco duro E:\ABCD\efg\mydb.db. ¿Cómo accedo con la interfaz de línea de comandos sqlite3? .open E:\ABCD\efg\mydb.dbNo funciona. Esta es la pregunta que se hizo.

Encontré que la mejor manera de hacer el trabajo es

  • copie y pegue todos sus archivos db en 1 directorio (digamos E:\ABCD\efg\mydbs)
  • cambie a ese directorio en su línea de comando
  • ahora abierto sqlite3y luego.open mydb.db

De esta manera, también puede realizar la operación de unión en diferentes tablas que pertenecen a diferentes bases de datos.

Ritwik
fuente
¿Has probado E:primero? A menudo, a Windows no le gusta hacer referencia a directorios en otras unidades sin cambiar la letra usted mismo.
Aaron Franke
1
Sí, funciona, pero eso no será factible cuando necesite unir diferentes tablas de diferentes bases de datos. Las bases de datos adjuntas ya no se adjuntarán una vez que salga y cambie de directorio.
Ritwik