SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库,它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中,这意味着数据库的创建和维护都非常简单。

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_idpid
    • 使用 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_idnew_pid
    • 更新 algo_instances 表中指定 id 的记录,设置新的 pid
python 复制代码
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的数据库,可以用该工具打开并查看:

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

参考

  1. SQLite Home Page
  2. https://en.wikipedia.org/wiki/SQLite
  3. Downloads - DB Browser for SQLite
  4. sqlite3 --- DB-API 2.0 interface for SQLite databases --- Python 3.12.3 documentation
相关推荐
Mr.kanglong2 小时前
【MySQL】初始MySQL、库与表的操作
数据库·mysql
GIS小小研究僧2 小时前
PostgreSQL 数据库备份与还原
数据库·postgresql·oracle·postgis
西木Qi3 小时前
数据库备份、主从、集群等配置
数据库
qw9493 小时前
MySQL(高级特性篇) 13 章——事务基础知识
数据库·mysql
MXsoft6183 小时前
基于监控易一体化运维软件的浪潮服务器监控指标详解
运维·数据库
码农幻想梦3 小时前
实验十 数据库完整性实验
数据库·sql·oracle
小安同学iter3 小时前
MySQL数据库(二)
数据库·sql·mysql·oracle
努力成为头发茂密的程序员4 小时前
(0基础版,无需输入代码爬取)新手小白初步学习八爪鱼采集器
数据库·学习·数据分析
martian6654 小时前
第22篇:Python开发进阶:详解使用SQLAlchemy进行ORM数据库编程技术
数据库·python·oracle
zm5 小时前
C基础寒假练习(4)
java·前端·数据库