SQLite:一个极简使用教程

news2024/11/25 13:46:47

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_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的数据库,可以用该工具打开并查看:

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

参考

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Steam夏促遇到社区打不开、社区进不去的处理措施一览

在Steam夏促中,绝大部分Steam游戏都会有折扣优惠,包括一些3A大作在夏促中也会降价售卖,玩家可以低价购买到自己心仪的游戏。不少玩家进入Steam社区查看游戏评价时遇到社区打不开、社区进不去的情况,不知道怎么解决,下面…

Pycharm一些问题解决办法

研究生期间遇到关于Pycharm一些问题报错以及解决办法的汇总 ModuleNotFoundError: No module named sklearn’ 安装机器学习库,需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learnPyCharm 导包提示 unresolved reference 描述:模块…

React小记(五)_Hooks入门到进阶

React 16.8 版本 类组件 和 函数组件 两种组件共存,到目前 React 18 版本,官方已经不在推荐使用类组件,在函数组件中 hooks 是必不可少的,它允许我们函数组件像类组件一样可以使用组件的状态,并模拟组件的生命周期等一…

新手向导:掌握Axure RP的第一步

其实很多时候,我们很容易把教程做得太复杂,让学生失去重点被复杂的理论吓到。入门基础的时候只需要先弄清楚两个核心内容,学起来就容易多了:一是简单了解这个软件,二是学习这个软件的基本操作。所以如果你问我什么是好的 Axure RP…

chrome 配置允许跨域

目录 1.Chrome跨域插件配置 1.1启动插件 1.2. 设置本地调试跨域 2 Firefox跨域插件 2.1. 安装插件 CORS Everywhere 2.2. 启动插件 3 工具下载链接 1.Chrome跨域插件配置 使用chrome插件“Allow CORS: Access-Control-Allow-origin ”来解决跨域问题。 点击pin图标&…

小语言模型SLM 百科全书

想象一下这样一个世界:智能助手不再驻留在云端,而是驻留在你的手机上,无缝理解你的需求并以闪电般的速度做出响应。这不是科幻小说;这是小型语言模型 (SLM) 的前景,这是一个快速发展的领域,有可能改变我们与…

倒装COB封装技术与常规SMD封装技术差异对比

倒装COB显示屏与常规SMD LED显示屏一个很大的差异点就是在于封装工艺的不同,COB(Chip on Board)封装和SMD(Surface Mounted Device)封装是LED显示屏领域中两种常见的技术,所表现出来的差异主要在于封装结构…

“卷王”新思路!孟德尔随机化联合共定位,IF冲上12+

今天分享的这篇文章很有意思,用上了统计学中的“顶流CP”孟德尔随机化贝叶斯共定位,强强联手,让孟德尔随机化不再单调!本文思路清晰,设计严谨,结果可靠,想学习孟德尔随机化发文套路的千万不要错…

【selenium 】操作元素

操作元素 元素操作鼠标操作键盘操作 元素操作 元素操作示例清空输入框clear()deiver.find_element_by_id(“username”).clear()输入文字send_keys()deiver.find_element_by_id(“username”).send_keys(‘zs’)元素点击 click()deiver.find_element_by_id(“login”).click()…

手持小风扇哪个牌子比较好?五大热门手持小风扇品牌推荐

炎炎夏日,真的需要一款随身小风扇来拯救我们的高温困境!不过,市面上的选择太多了,真的让人眼花缭乱。今天,我就给大家快速推荐五款热门的手持小风扇,它们不仅轻便易携,而且各有特色。有的是风力…

vue3中若v-model绑定的响应字段出现三级,该如何实现rules验证规则

比如以下内容: 配置的rules内容 const rulesref({title:[{required:true,message:"请输入标题",trigger:"blur"},{max:50,message:"最大不能超过256个字",trigger:"blur"}],Category:[{required:true,message:"请选择…

使用Vue-cli脚手架创建uni-app项目(Vue2版本)

文章目录 前言准备工作接下来创建我们的 uni-app 项目 前言 uni-app官方说除了HBuilderX可视化界面,也可以使用 cli 脚手架,可以通过 vue-cli 创建 uni-app 项目。 uni-app官网文档 准备工作 需要安装 node.js 与 vue-cli 脚手架 我是用的版本如下 no…

智芯开发板(Z20K11x)介绍

一、智芯简介 智芯半导体(Zhixin Semiconductor)成立于2019年8月8日,在天津、合肥、苏州、南京、上海等地均 已设立分支机构;提供高可靠性的汽车电子芯片,广泛用于包括汽车车身电子 控制、新能源汽车控制、动力系统、汽车自动驾驶监控芯片等…

嵌入式学习——数据结构(队列、二叉树)——day49

1. 队列 1.1 定义 是一种线性数据结构类型,可以用数组或链表等基础数据结构来实现。它遵循先进先出(FIFO,First In First Out)的原则。这意味着最先进入队列的元素会最先被移出。 1.2 基本概念 队列(Queue&#xff…

微机原理与接口技术:重点内容|计算机系统|学习笔记

系列目录 前言 只将最重要的知识点考点列出来方便学习复习 目录 系列目录前言第1章 微型计算机概述第2章 16位和32位微处理机🌟16位微处理器 8086 第3章 Pentium 的指令系统常用指令 第4章 存储器、存储管理和高速缓存技术第5章 微型计算机和外设的数据传输第6章 串…

ollama大模型qwen2:7b性能测试

部署環境信息: (base) rootalg-dev17:/opt# lscpu Architecture: x86_64CPU op-mode(s): 32-bit, 64-bitAddress sizes: 45 bits physical, 48 bits virtualByte Order: Little Endian CPU(s): 8On-line CP…

Application Studio 学习笔记(3)

一、工具栏按钮 1、panel控件添加工具栏按钮 展开panel控件的Advanced属性并点击Action Data,进入Action Data编辑界面 新增Action Data数据,Sequence设定工具按钮的显示顺序 默认工具按钮会显示在弹出工具栏中 勾选Add to Primary ToolBar后&#xff…

电容式单按键触摸检测及接近感应控制芯片 SD8233LQG

SD8233LQG是一款电容式单按键触摸检测及接近感应控制芯片。采用 CMOS 工艺制造,内建稳压和去抖动电路,高可靠性,专为取代传统按键开关而设计。超低功耗与宽工作电压特性,广泛应用于 TWS及 DC 应用的触摸产品中,实现产品…

vue3 中的根据某些特定的文字来筛选数组数据

现在有一批这样的数据 这样的数据 我想根据 hallName 来筛选数据 比如关键字有 我不需要 带有下面字符换的数组数据 const importantData ref(["VIP", "CINITY", "杜比", "IMAX", "4DX", vip, Vip]) 使用some 方法 arr…

笔记-python爬虫概述

目录 常用第三方库 爬虫框架 动态页面渲染1. url请求分析2. selenium3. phantomjs4. splash5. spynner 爬虫防屏蔽策略1. 修改User-Agent2. 禁止cookies3. 设置请求时间间隔4. 代理IP池5. 使用Selenium6. 破解验证码常用第三方库 对于爬虫初学者,建议在了解爬虫原…