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

7cwmlq89  于 2022-11-15  发布在  SQLite
关注(0)|答案(9)|浏览(166)

我用的是SQLite Command Line Shell。如前所述,我可以通过将数据库作为参数提供给可执行文件来打开该数据库:

sqlite3 data.db

在没有将文件作为命令行参数提供的情况下调用数据库文件后,我想不出如何从该工具内打开该数据库文件(假设我在Windows中双击sqlite3.exe)。

SQLite外壳工具中指定数据库文件的命令是什么?

7ajki6be

7ajki6be1#

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

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

并且您可以看到所有附加的数据库,其中包含.Databases
在正常情况下,Main用于命令行数据库

.databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main                                                                       
1    temp                                                                       
2    ttt              c:\home\user\gg.ite
f3temu5u

f3temu5u2#

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

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

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

sdnqo3pr

sdnqo3pr3#

Sqlite外壳中用于打开数据库的命令为.Open
语法是,

sqlite> .open dbasename.db

如果是要创建并打开的新数据库,则为

sqlite> .open --new dbasename.db

如果数据库存在于不同的文件夹中,则必须按如下方式说明路径:

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

在Windows命令行管理程序中,您应该使用‘\’表示目录,但在SQLite中,目录由‘/’表示。如果您仍然喜欢使用Windows表示法,则应该对每个‘\’使用转义序列

ogq8wdun

ogq8wdun4#

与在其他数据库系统中一样,您可以使用数据库的名称来标识双重命名表。可以直接使用唯一的表名。

select * from ttt.table_name;

或者如果所有连接的数据库中的表名是唯一的

select * from my_unique_table_name;

但我认为Sqlite-Shell的功能只是用于手动查找或手动操作数据,因此这种方式是不重要的。
通常,您会在脚本中使用sqlite-Command-line

rsl1atfo

rsl1atfo5#

您只需在命令行中指定数据库文件名:

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外壳附加另一个数据库文件:

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

但谁知道如何从命令行指定多个数据库文件,以便从命令行执行查询?

u0sqgete

u0sqgete6#

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.
a5g8bdjr

a5g8bdjr7#

较旧的SQLite命令行外壳(sqlite3.exe)似乎不提供.open命令或任何易于识别的替代方案。
尽管我没有找到明确的参考资料,但似乎.open命令是在版本3.15左右引入的。SQLite Release History首先提到了带有2016-10-14(3.15.0)的.open命令。

68de4m5k

68de4m5k8#

我想知道为什么没有人能够理解这个问题的真正含义。它说明了SQLite外壳工具中指定数据库文件的命令是什么?
我的硬盘E:\ABCD\efg\mydb.db上有一个SQLite数据库。如何使用SQLITE3命令行界面访问它?.open E:\ABCD\efg\mydb.db不工作。这就是提出的问题。
我发现做这项工作最好的方法是

  • 复制-将所有数据库文件粘贴到一个目录中(例如E:\ABCD\efg\mydbs)
  • 在命令行中切换到该目录
  • 现在打开sqlite3,然后打开.open mydb.db

这样,您还可以对属于不同数据库的不同表执行join操作。

j5fpnvbx

j5fpnvbx9#

在我的例子中,我想通过提供路径作为参数从另一个驱动器打开一个数据库,但它不起作用。解决方案是用双引号将数据库的完整路径括起来。因此,在包含您的sqlite3.exe的文件夹中的PowerShell窗口中:
.\sqlite3.exe "E:\ABCD\efg\mydb.db"

相关问题