接上文Python开发从零开始-49.20-数据库操作,本文小编与大家分享 Python 数据库操作的相关知识。
(34)附加数据库
SQLite 命令行中,一次数据库连接只能访问一个数据库,如果要操作其他数据库就必须切换数据库连接,否则将报错。这对于需要整合来自多个数据源的数据的场景非常不便。
例如:当前路径下有 test.db 和 db1.db 两个数据库

连接 db1.db 后 ,如果在当前连接中访问 test.db 数据库就会报错。

SQLite 提供了 “附加数据库” 功能来解决这个问题。 “附加数据库”(ATTACH DATABASE)不是将一个或多个数据库 “附加” 到另一个已存在的数据库,而是将一个或多个数据库文件附加到当前的数据库连接上。这样就可以在同一个连接中查询多个数据库文件中的数据,注意附加数据库仅在当前连接有效。
可以使用 ATTACH DATABASE 语句来附加数据库,其基本语法为:
ATTACH DATABASE 'file_name' AS 'alias_name'; 语法解释:
注意:
|
例如:使用 ATTACH DATABASE 语句来将 test.db 附加到 db1.db 中,操作步骤为:
1)使用 .open db1.db 命令打开 db1.db 数据库;
2)使用 .databases 命令查看当前数据库列表,当前仅 db1.db 数据库;
3)使用下面语句将 test.db 附加到当前连接,逻辑数据库名 testDB;
ATTACH DATABASE 'test.db' AS 'testDB'4)使用 .databases 命令查看当前数据库列表,当前有 db1.db 和 testDB 两个数据库;
5)使用下面语句查询 test.db 数据库 中的 COMPANY 表。
SELECT * FROM testDB.COMPANY;SQLite 命令提示符中完整操作如下所示:

附加数据库的注意事项:
事务处理:附加一个数据库时,所有在该事务开始后附加的数据库都会被包含在当前事务中。如果事务失败,这些附加的数据库也会被回滚。
权限和安全性:确保附加的数据库是安全的,尤其是当它们来自不可信的源时。SQLite在处理文件路径时相对宽松,因此要小心处理路径注入等问题。
(35)分离数据库
分离数据库(DETACH DATABASE)是附加数据库的逆向操作,用于将附加的数据库分离出当前连接。
可以使用 DETACH DATABASE 语句分离数据库,其基本语法如下:
DETACH DATABASE 'alias_name'; 语法解释: alias_name:附加数据库的逻辑数据库名。 |
删除前文附加的数据库 testDB 使用如下语句
DETACH DATABASE 'testDB'SQLite 命令提示符中完整操作如下所示:

分离数据库的注意事项:
确保在分离数据库之前完成所有需要的操作,因为一旦数据库被分离,将无法再访问它,除非再次附加;
附加的数据库可以是只读的或可写的,这取决于是如何打开原始数据库,例如,使用 SQLite 命令行工具时,可以指定只读模式;
附加和分离数据库时要小心管理内存和资源,特别是在处理大型或复杂的数据集时。频繁地附加和分离数据库可能会影响性能。
(36)数据迁移
SQLite 数据迁移是指将 SQLite 数据库的结构(Schema)和数据从一种状态转移到另一种状态的过程。
1)简单迁移
可以直接复制 SQLite 数据库文件来实现数据迁移。
2)将 SQLite 数据库结构和数据导出到文本文件
在命令提示符下,使用 sqlite3 命令结合 .dump 命令可以将 SQLite 数据库结构和数据导出到文本文件(通常为 .sql 文件)。注意 SQLite 默认使用 UTF-8 字符集,导出的文本文件需要确定字符集是否符合。其基本语法如下:
sqlite3 database_file_name .dump> text_file_name |
将 test.db 数据库结构和数据导出到 testDB.sql 文件中,使用以下语句:
sqlite3 test.db .dump > testDB.sql命令提示符(使用 CMD 而不是 PowerShell)操作如下所示:

导出的 testDB.sql 文件使用记事本打开如下所示:

3)将数据库结构和数据文本文件导入数据库
在命令提示符下,使用以下语法将数据库结构和数据文本文件导入数据库
将 testDB.sql 数据库结构和数据导入到 testDB.db 数据库中,使用以下语句:
sqlite3 testDB.db < testDB.sql命令提示符(使用 CMD 而不是 PowerShell)操作如下所示:

受文章篇幅所限,下文将继续介绍 Python 数据库操作的相关知识。