
1. SQLite特点
- 轻量级:SQLite不需要一个独立的服务器进程。它是一个嵌入式SQL数据库引擎,库文件被集成到应用程序中。
 - 零配置:SQLite不需要任何配置就可以运行,这使得它非常适合小型应用、原型开发、临时数据库等场景。
 - 跨平台:SQLite可以在多种操作系统上运行,包括Windows、macOS、Linux、Unix等。
 - 事务支持:SQLite支持ACID兼容的事务。
 - 并发控制:SQLite支持读写并发,写操作会锁定数据库,而读操作则可以并发执行。
 - 存储限制:SQLite数据库的大小限制为2^31个页面,每个页面默认为1KB,这意味着最大数据库大小可以达到140TB(取决于页面大小)。
 - 编程语言接口:SQLite提供了多种编程语言的接口,包括C, C++, Python, Java, PHP, Ruby等。
 - 无需安装:SQLite作为一个库文件,可以直接嵌入到应用程序中,无需单独安装。
 - 开源:SQLite是开源软件,根据公共领域授权发布。
 - 适合轻量级应用:由于其轻量级的特性,SQLite非常适合用于移动应用、桌面应用、小型网站等。
 - 内置函数丰富:SQLite提供了丰富的内置函数,可以处理字符串、日期和时间、数学运算等。
 - 支持多种查询:SQLite支持大多数SQL查询,包括JOIN、事务、触发器、视图等。
 
2. 代码示例
        我们定义一个名为 AlgoInstanceDB 的类,用于管理一个SQLite数据库,该数据库用于存储算法实例的信息,包括它们的唯一标识符(id)和进程ID(pid)。简单描述下实现的功能:
-  
初始化 (
__init__方法):- 接收数据库文件的路径 (
db_path)。 - 连接到SQLite数据库,如果文件不存在,会自动创建。
 - 调用 
create_table方法来确保数据库中存在必要的表。 
 - 接收数据库文件的路径 (
 -  
创建表 (
create_table方法):- 使用 
CREATE TABLE IF NOT EXISTS语句来创建一个名为algo_instances的表,如果该表尚不存在。 - 表包含两列:
id(文本类型,唯一)和pid(整型)。 
 - 使用 
 -  
获取算法实例的PID (
get_algo_instance_pid方法):- 接收一个 
algo_instance_id。 - 查询数据库,返回与该 
id相关联的pid。 
 - 接收一个 
 -  
插入或更新算法实例 (
insert_algo_instance方法):- 接收 
algo_instance_id和pid。 - 使用 
INSERT OR REPLACE语句来插入新记录或更新现有记录。 - 这确保了每个 
id是唯一的。 
 - 接收 
 -  
查询算法实例 (
query_algo_instance方法):- 接收一个 
algo_instance_id。 - 查询数据库,返回与该 
id相关的整条记录。 
 - 接收一个 
 -  
删除算法实例 (
delete_algo_instance方法):- 接收一个 
algo_instance_id。 - 从 
algo_instances表中删除与该id相关联的记录。 
 - 接收一个 
 -  
更新算法实例的PID (
update_algo_instance方法):- 接收 
algo_instance_id和new_pid。 - 更新 
algo_instances表中指定id的记录,设置新的pid。 
 - 接收 
 
import sqlite3
class AlgoInstanceDB(object):
    def __init__(self, db_path):
        self.db_path = db_path
        self.conn = sqlite3.connect(db_path)
        self.create_table()
    def create_table(self):
        """创建表."""
        cursor = self.conn.cursor()
        cursor.execute("""CREATE TABLE IF NOT EXISTS algo_instances (
                        id TEXT UNIQUE,
                        pid INTEGER
                        )""")
        self.conn.commit()
    def get_algo_instance_pid(self, algo_instance_id):
        """获取算法实例的PID."""
        cursor = self.conn.cursor()
        cursor.execute("SELECT pid FROM algo_instances WHERE id = ?", (algo_instance_id,))
        return cursor.fetchone()[0]
    def insert_algo_instance(self, algo_instance_id, pid):
        """插入或更新算法实例."""
        cursor = self.conn.cursor()
        cursor.execute("INSERT OR REPLACE INTO algo_instances (id, pid) VALUES (?, ?)", (algo_instance_id, pid))
        self.conn.commit()
    def query_algo_instance(self, algo_instance_id):
        """查询算法实例是否存在."""
        cursor = self.conn.cursor()
        cursor.execute("SELECT * FROM algo_instances WHERE id = ?", (algo_instance_id,))
        return cursor.fetchone()
    def delete_algo_instance(self, algo_instance_id):
        """删除算法实例."""
        cursor = self.conn.cursor()
        cursor.execute("DELETE FROM algo_instances WHERE id = ?", (algo_instance_id,))
        self.conn.commit()
    def update_algo_instance(self, algo_instance_id, new_pid):
        """更新算法实例的PID."""
        cursor = self.conn.cursor()
        cursor.execute("UPDATE algo_instances SET pid = ? WHERE id = ?", (new_pid, algo_instance_id))
        self.conn.commit()
if __name__ == "__main__":
    db_path = "algo_instances.db"
    db = AlgoInstanceDB(db_path)
    # 示例:插入或更新算法实例
    # db.insert_algo_instance("A001", 1234)
    # 示例:查询算法实例
    query = db.query_algo_instance("A002")
    print(query)
    # 示例:删除算法实例
    # db.delete_algo_instance("A002")
    # 示例:更新算法实例的PID
    # db.update_algo_instance("A001", 5678) 
3. 使用数据库工具进行管理
DB Browser是个专门用于SQLite的数据库管理工具,可以从这里下载:Downloads - DB Browser for SQLite,选择所需要的系统版本下载即可。

使用该软件可以可视化地查看数据库信息,比如我们上面创建了一个关于algo instance的数据库,可以用该工具打开并查看:

也可以浏览数据,查看我们写入的内容:

参考
- SQLite Home Page
 - https://en.wikipedia.org/wiki/SQLite
 - Downloads - DB Browser for SQLite
 - sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.3 documentation
 










