【发布时间】:2012-02-21 21:18:42
【问题描述】:
我正在使用SQLite Command Line Shell。如文档所述,我可以通过将数据库作为参数提供给可执行文件来打开数据库:
sqlite3 data.db
在没有将文件作为命令行参数提供的情况下调用它后,我无法弄清楚如何从 在工具中打开数据库文件(例如,如果我双击 sqlite3.exe在 Windows 中)。
SQLite shell 工具中指定数据库文件的命令是什么?
【问题讨论】:
标签: sqlite
我正在使用SQLite Command Line Shell。如文档所述,我可以通过将数据库作为参数提供给可执行文件来打开数据库:
sqlite3 data.db
在没有将文件作为命令行参数提供的情况下调用它后,我无法弄清楚如何从 在工具中打开数据库文件(例如,如果我双击 sqlite3.exe在 Windows 中)。
SQLite shell 工具中指定数据库文件的命令是什么?
【问题讨论】:
标签: sqlite
较旧的 SQLite 命令行 shell (sqlite3.exe) 似乎不提供 .open 命令或任何易于识别的替代命令。
虽然我没有找到明确的参考资料,但似乎 .open 命令是在 3.15 版本中引入的。 SQLite Release History 首先提到 .open 命令与 2016-10-14 (3.15.0)。
【讨论】:
您可以在命令行中简单地指定数据库文件名:
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
此外,您可以从命令行执行查询:
bash-3.2 # sqlite3 UserDb.sqlite 'select count(*) from genres'
10
您可以从 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
第二个数据库中的表可以通过数据库前缀访问:
sqlite> select count(*) from RelDb.localizedString;
2442
但是谁知道如何在命令行中指定多个数据库文件来执行命令行查询呢?
【讨论】:
Sqlite shell 中打开数据库的命令是 .open
语法是,
sqlite> .open dbasename.db
如果是您要创建并打开的新数据库,则为
sqlite> .open --new dbasename.db
如果数据库存在于不同的文件夹中,则必须像这样提及路径:
sqlite> .open D:/MainFolder/SubFolder/...database.db
在 Windows Command shell 中,你应该使用 '\' 来表示一个目录,但是在 SQLite 中,目录是用 '/' 来表示的。 如果您仍然喜欢使用 Windows 表示法,则应为每个 '\' 使用转义序列
【讨论】:
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.
【讨论】:
我想知道为什么没有人能够得到问题的实际问题。它说明了SQLite shell 工具中指定数据库文件的命令是什么?
我的硬盘 E:\ABCD\efg\mydb.db 上有一个 sqlite 数据库。如何使用 sqlite3 命令行界面访问它? .open E:\ABCD\efg\mydb.db 不起作用。这是问的问题。
我发现做这项工作的最佳方式是
E:\ABCD\efg\mydbs)sqlite3,然后打开.open mydb.db
这样你也可以对属于不同数据库的不同表进行join操作。
【讨论】:
E:吗?很多时候,Windows 不喜欢在不自己更改字母的情况下引用其他驱动器上的目录。
我认为打开单个数据库并开始查询的最简单方法是:
sqlite> .open "test.db"
sqlite> SELECT * FROM table_name ... ;
注意:这仅适用于版本 3.8.2+
【讨论】:
与在其他数据库系统中执行此操作的方式相同,您可以使用数据库的名称来识别双命名表。可以直接使用唯一的表名。
select * from ttt.table_name;
或者如果所有附加数据库中的表名是唯一的
select * from my_unique_table_name;
但我认为 sqlite-shell 的只是用于手动查找或手动数据操作,因此这种方式更无关紧要
通常你会在脚本中使用 sqlite-command-line
【讨论】:
您可以附加一个甚至多个数据库,并以与使用 sqlite dbname.db 相同的方式使用它
sqlite3
:
sqlite> attach "mydb.sqlite" as db1;
你可以看到所有附加的数据库 .数据库
其中main通常用于命令行数据库
.databases
seq name file
--- --------------- ----------------------------------------------------------
0 main
1 temp
2 ttt c:\home\user\gg.ite
【讨论】:
SELECT * FROM db1.tbl1;