从SQLite命令行shell中打开数据库文件

Nol*_*Amy 84 sqlite

我正在使用SQLite命令行Shell.如文档所述,我可以通过将其作为可执行文件的参数提供来打开数据库:

sqlite3 data.db
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何在调用它之后从工具中打开数据库文件而不将该文件作为命令行参数提供(如果我在Windows中双击sqlite3.exe).SQLite shell工具中用于指定数据库文件的命令是什么?

小智 105

您可以附加一个甚至更多的数据库,并以与使用sqlite dbname.db相同的方式使用它

sqlite3
:
sqlite> attach "mydb.sqlite" as db1;
Run Code Online (Sandbox Code Playgroud)

你可以看到所有附加数据库的.databases

在正常情况下,main用于命令行db

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite                                   
Run Code Online (Sandbox Code Playgroud)

  • 啊! 谢谢.如何指定我希望sqlite运行我的查询的数据库? (14认同)

Jan*_*eal 18

我认为打开单个数据库并开始查询的最简单方法是:

sqlite> .open "test.db"
sqlite> SELECT * FROM table_name ... ;
Run Code Online (Sandbox Code Playgroud)

注意:这仅适用于版本3.8.2+

  • @Ben注意点 (3认同)

Amm*_*mmu 11

Sqlite shell中用于打开数据库的命令是.open

语法是,

sqlite> .open dbasename.db
Run Code Online (Sandbox Code Playgroud)

如果它是您想要创建和打开的新数据库,那就是

sqlite> .open --new dbasename.db
Run Code Online (Sandbox Code Playgroud)

如果数据库存在于不同的文件夹中,则必须提到如下路径:

sqlite> .open D:/MainFolder/SubFolder/...database.db
Run Code Online (Sandbox Code Playgroud)

在Windows Command shell中,您应该使用'\'来表示目录,但在SQLite目录中用'/'表示.如果您仍然喜欢使用Windows表示法,则应为每个'\'使用转义序列


小智 9

与在其他数据库系统中执行此操作的方式相同,您可以使用db的名称来标识双重命名表.唯一的表名可以直接使用.

select * from ttt.table_name;
Run Code Online (Sandbox Code Playgroud)

或者所有附加数据库中的表名是否唯一

select * from my_unique_table_name;
Run Code Online (Sandbox Code Playgroud)

但我认为sqlite-shell仅用于手动查找或手动数据操作,因此这种方式更无关紧要

通常你会在脚本中使用sqlite-command-line


Ale*_*iuk 5

您可以简单地在命令行中指定数据库文件名:

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
Run Code Online (Sandbox Code Playgroud)

此外,您可以从命令行执行查询:

bash-3.2 # sqlite3 UserDb.sqlite 'select count(*) from genres'
10
Run Code Online (Sandbox Code Playgroud)

您可以从 SQLite shell 附加另一个数据库文件:

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                      
Run Code Online (Sandbox Code Playgroud)

可以通过数据库的前缀访问第二个数据库中的表:

sqlite> select count(*) from RelDb.localizedString;
2442
Run Code Online (Sandbox Code Playgroud)

但是谁知道如何从命令行指定多个数据库文件来从命令行执行查询呢?