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_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 sqlite3class AlgoInstanceDB(object):def __init__(self, db_path):self.db_path = db_pathself.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.mzph.cn/diannao/36887.shtml

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

相关文章

万物皆可爬——亮数据代理IP+Python爬虫批量下载百度图片助力AI训练

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【导航大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

注意!!2024下《网络规划设计师》易混淆知识点来了,赶紧码住

宝子们,在复习软考网络规划设计师中,是不是觉得有很多知识点含义比较相近,很多友友刚看的时候,估计会像我一样把它们弄混,作为一个软考老鸟,在这里给大家整理了网规学习过程中易混淆的知识点,大…

新版彩虹云商城卡密商城/自动发卡可分站多套模板可选

完整免授权彩虹源码(多模板+小储云商城模板)版本 6.7.5,部分代码加密,使用起来一点问题都没有,加密部分是授权那一块,可以二开更改一下,就完事 无差错,免授权,功能齐全,模板齐全。 后台可设置的模板有 20 套,喜欢的就购买研究学习 支持多个接口,支持到账到个人钱…

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)​编辑转到底部 In this Document Purpose Troubleshooting Steps References APPLIES TO: Oracle Database - Enterprise Edition Oracle Database Cloud Schema Service - Version N/A and lat…

Android 生成 AAR 包

当我们需要在 Android 项目中引用第三方库或模块时,常常会使用 AAR(Android Archive)包。AAR 包是一种包含了编译后代码、资源文件和清单文件等的二进制文件。 步骤 1:创建一个 Android Library 项目 在 Android Studio 中&#…

Ngnix内存池——高并发实现高效内存管理

目录 一、高并发下传统方式的弊端 1、常用的内存操作函数 2、弊端一 3、弊端二 4、弊端三 5、弊端四 二、弊端解决之道 1、内存管理维度分析 2、内存管理组件选型 三、高并发内存管理最佳实践 1、内存池技术 2、内存池如何解决弊端 3、高并发内存池如何实现 四、…

FC-Planner: 一个基于骨架引导的快速覆盖复杂3D场景的规划框架方案实现与难点讲解

FC-Planner方案实现细节与难点讲解 1. 骨架提取 骨架提取是FC-Planner的核心模块之一,其目的是从输入的点云数据中提取出场景的骨架结构。这一步的关键是如何准确高效地计算每个点的ROSA点。 1.1 ROSA点计算 ROSA点的计算涉及到两个优化问题: ROSA点方向 v p v_p vp​的优化…

《数字图像处理与机器视觉》案例二(基于边缘检测和数学形态学焊缝图像处理)

一、前言 焊缝是评价焊接质量的重要标志,人工检测方法存在检测标准不统一,检测精度低,焊缝视觉检测技术作为一种重要的质量检测方法,正逐渐在各行各业中崭露头角。把焊缝准确的从焊接工件中准确分割出来是焊缝评价的关键一步&…

linux上git的使用

目录 1.测试是否安装有git 2.下载项目到本地 3.三板斧 1.将代码放在创建的目录中 2.提交改动到本地 3.提交代码到远端 4.注意点 以及补充内容 1.测试是否安装有git 如果输入git --help 会显示下面一大串那么就是已经安装,否则需要自行手动安装 yum install g…

聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。

聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。完整试题答案查看 A.三次B.两次C.一次 综合运用“四不两直”、明察暗访、 ()、…

洁盟超声波清洗机怎么样?横向测评希亦、洁盟、苏泊尔超声波清洗机谁是实力派

生活中大多数人戴眼镜,但是很多人都不注意眼镜的保养,导致镜片越来越模糊,从而引发多边的状况发生,比如长久戴模糊不清的眼镜,视力会受到影响随之下降。甚至是眼镜长期不清洗,上面的灰尘、细菌会影响眼部健…

彩虹PLM系统在航空航天业的应用与实践

彩虹PLM系统在航空航天业的应用与实践 彩虹PLM系统作为航空航天业的卓越解决方案,已经在众多企业中得到了广泛的应用和实践。该系统通过其独特的功能和优势,为航空航天企业带来了显著的管理效益和市场竞争力提升。 彩虹PLM系统 在应用方面,彩…

这样解释 TCP_IP 真的很好理解

想象一下,你住在一个大城市里,这个城市就是你的计算机网络世界。在这个城市中,有许多房子(代表不同的计算机),这些房子之间由各种道路和交通设施连接起来(代表网络的物理连接)。 现在…

1.2 离散LTI系统的时域分析

目录 离散系统的定义 离散LTI系统的时域描述h[k] 离散系统的分类 线性与非线性系统 时变与非时变系统 因果与非因果系统 稳定与不稳定系统 滑动平均系统 LTI——Linear and Time-invariant System 线性时不变系统 离散系统的定义 离散LTI系统的时域描述h[k] 离…

【java12】java12新特性之File的mismatch方法

Java12引入了一个新的方法 mismatch,它属于java.nio.file.Files类。此方法用于比较两个文件的内容,并返回第一个不匹配字节的位置。如果两个文件完全相同,则返回-1。 Files.mismatch 方法声明 public static long mismatch(Path path1, Pat…

【并发编程】2-Synchronized

基本概念 线程安全问题三个要素:多线程、共享资源、非原子性操作;产生的根本原因:多条线程同时对一个共享资源进行非原子性操作;Synchronized解决线程安全问题的方式:通过互斥锁将多线程的并行执行变为单线程串行执行…

昇思25天学习打卡营第4天|数据集Dataset

数据集 Dataset 介绍 之前说过,MindSpore是基于Pipeline,通过Dataset和Transformer进行数据处理。Dataset在其中是用来加载原始数据的。mindSpore提供了数据集加载接口,可以加载文本、图像、音频等,同时也可以自定义加载接口。此…

【UE开发】游戏库存UI系统Demo

1.项目介绍 1.描述:一种用于存储记录玩家物品的游戏内可视化操作系统。 2.演示:https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大纲: 4.样式: 2.W_Inventory_Main_01(…

CORE Mobility Errorr的调试

在运行CORE tutorial 3中的mobility示例时,出现如下错误: 当看到这个问题的时候,并没有仔细去分析日志和现象,在core-daemon的进程打印界面只看了一下最后的出错堆栈: 2024-06-27 10:43:48,614 - ERROR - _server:_ca…

MySQL8 新特性——公用表表达式用法 with t1 as (select * from user)

MySQL8 新特性——公用表表达式用法_mysql ctes-CSDN博客 1.普通公用表表达式 MySQL8 新特性——公用表表达式用法 在MySQL 8.0及更高版本中,引入了公用表表达式(Common Table Expressions,CTEs),它是一种方便且可重…