当前位置: 首页 > news >正文

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

相关文章:

SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库,它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中,这意味着数据库的创建和维护都非常简单。 1. SQLite特点 轻量级:SQLite不需要一个独立的服务器进程。它是一个嵌入式SQ…...

酒水公司网站品牌建设宣传如何进行

红酒、白酒、啤酒、米酒、精酿啤酒等各种各样的酒水类型和从业公司数量比较多,部分品牌有收藏价值/价格高但销量相对较低,也有部分属于亲民,价格低但销量高,国内外受众广,人员标签不同生意拓展面自然也不同。 无论如何…...

【高级篇】InnoDB引擎深入:核心机制与实战优化(十五)

引言 在探索了MySQL集群与分布式技术之后,我们进入了数据库引擎的核心地带——InnoDB。作为MySQL的默认存储引擎,InnoDB凭借其对事务的支持、行级锁定、高效的恢复机制以及复杂的内存管理,成为众多应用场景的首选。本章,我们将深入InnoDB的内部机制,透彻理解锁管理、事务…...

打造安全的Linux环境:关键配置指南

打造安全的Linux环境:关键配置指南 Linux作为一款开源的操作系统,因其稳定性、灵活性和安全性而受到广泛欢迎。然而,即使Linux系统本身设计得相对安全,不正确的配置或管理不善也可能导致安全风险。本文将指导你如何通过关键配置来…...

什么是WABF验证?

今年的618电商购物节已经落下帷幕,在此期间,各大电商平台都普遍迎来了用户访问量、优惠券领取量和交易量的显著增长。在这一时期,业务安全成为电商平台关注的焦点。验证码作为一种常见的业务安全工具,能够有效应对业务安全问题。然…...

CSS3 分页

CSS3 分页 分页是网页设计中常见的一种布局方式,它允许将内容分布在多个页面中,从而提高用户体验和网站的可管理性。CSS3 提供了多种灵活的方式来设计分页,使得开发者能够创建既美观又实用的分页导航。本文将详细介绍如何使用 CSS3 来创建和…...

QWebChannel实现与JS的交互

QWebChannel实现与JS的交互 在利用Qt框架的QWebEngineView进行嵌入浏览器开发时,可以很方便的通过 QWebChannel实现与js的交互,本节内容简单讲解js与Qt应用程序相互发送消息。 最近做项目遇到了这个问题,发现网上的例子不全,很多…...

【漏洞复现】电信网关配置管理系统——命令执行

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 电信网关配置管理系统是一个用于管理和配置电信网关设备的软件系…...

排序算法。

快速排序:QuickSort 选标准值,将比标准值小的放在其左侧,将比标准值大的放在其右侧,左右两部分分别重复以上操作 1.挖坑填补法 拆东墙补西墙 先把第一个数拿出来用temp储存 然后从最后面遍历 找到比temp小的放到第一个位置 然后…...

告别 “屎山” 代码,务必掌握这14 个 SpringBoot 优化小妙招

插: AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈,越努力越幸运,大家…...

测量无人船作业流程是怎样的?

在一些特殊水域测量作业中,使用有人船进行测量时受阻较多,而采用无人测量船则效率就非常高了,它是解决复杂水域测量问题最直接最有效的方式。那么,测量无人船作业流程是怎样的?下面就让小编来为大家简单介绍一下&#…...

四川赤橙宏海商务信息咨询有限公司抖音开店靠谱吗?

在数字化浪潮席卷全球的今天,电商行业正以前所未有的速度发展。而在这个大潮中,四川赤橙宏海商务信息咨询有限公司凭借其专业的团队和前瞻性的战略眼光,专注于抖音电商服务,为广大商家提供了一站式解决方案,成为了行业…...

解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)

错误消息 ssh: connect to host IP port 22: Connection timed out 指出 SSH 客户端尝试连接到指定的 IP 地址和端口号(默认 SSH 端口是 22),但是连接超时了。这意味着客户端没有在预定时间内收到来自服务器的响应。 可能的原因 SSH 服务未…...

【笔记】echarts图表的缩放和鼠标滚动冲突的处理解决方案

解决方案不是很好,来源于github的issue,官方提供了,组合键触发缩放的功能。 https://github.com/apache/echarts/issues/5769 https://echarts.apache.org/zh/option.html#dataZoom-inside.zoomOnMouseWheel dataZoom-inside.zoomOnMouseWhe…...

代码随想录训练营Day51

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、不同的子序列二、两个字符串的删除操作三、编辑距离 前言 提示:这里可以添加本文要记录的大概内容: 今天是跟着代码随想录刷题的第…...

C#上位机与PLC

在工业自动化的舞台上,C#上位机与PLC之间的通信是一曲精妙绝伦的交响乐。今天,我们将一起揭开C#上位机与PLC通信的三种神秘实现方法,探索它们如何共同谱写出高效、稳定、灵活的工业自动化乐章。 序幕:通信的“前奏” 在深入了解…...

CVE-2018-8120漏洞提权:Windows 7的安全剖析与实战应用

CVE-2018-8120漏洞提权:Windows 7的安全剖析与实战应用 在网络安全的世界里,漏洞利用常常是攻击者用来获取系统控制权的捷径。2018年发现的CVE-2018-8120漏洞,针对Windows 7操作系统,提供了一个这样的途径。本文将深入分析这一漏…...

Python-正则表达式

目录 一、打开正则表达式 二、正则表达式的使用 1、限定符 (1)x*:*表示它前面的字符y 可以有0个或多个; (2)x:表示它前面的字符可以出现一次以上;(只可以匹配多次&…...

教程:在 Kubernetes 集群上部署 WordPress 网站

WordPress 是专为每个人设计的开源软件,强调创建网站、博客或应用程序的可访问性、性能、安全性和易用性。WordPress 是一个基于 PHP 的内容管理系统(CMS),使用 MySQL 作为数据存储,目前很多网站、电商独立站、个人博客…...

聊一聊 C# 弱引用 底层是怎么玩的

一:背景 1. 讲故事 最近在分析dump时,发现有程序的卡死和WeakReference有关,在以前只知道怎么用,但不清楚底层逻辑走向是什么样的,借着这个dump的契机来简单研究下。 二:弱引用的玩法 1. 一些基础概念 …...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

基于 HTTP 的单向流式通信协议SSE详解

SSE&#xff08;Server-Sent Events&#xff09;详解 &#x1f9e0; 什么是 SSE&#xff1f; SSE&#xff08;Server-Sent Events&#xff09; 是 HTML5 标准中定义的一种通信机制&#xff0c;它允许服务器主动将事件推送给客户端&#xff08;浏览器&#xff09;。与传统的 H…...