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

一、数据库 Sqlite3 资料

SQLite3 教程

SQLite3 是一个轻量级的嵌入式数据库引擎,它不需要单独的服务器进程,数据库直接存储在磁盘文件中。Python 内置了 sqlite3 模块,可以方便地操作 SQLite 数据库。以下是 SQLite3 的详细教程。


1. SQLite3 简介

  • SQLite3 是一个自包含、无服务器、零配置的 SQL 数据库引擎。
  • 数据库存储在一个单一的文件中,易于移植和备份。
  • 适用于小型应用程序、嵌入式系统或原型开发。

2. Python 中的 SQLite3

Python 的 sqlite3 模块提供了操作 SQLite 数据库的接口。以下是基本用法。


3. 基本操作

3.1 连接数据库

使用 sqlite3.connect() 方法连接数据库。如果数据库文件不存在,会自动创建。

import sqlite3# 连接数据库(如果不存在则创建)
conn = sqlite3.connect('example.db')
3.2 创建游标

游标用于执行 SQL 语句并获取结果。

cursor = conn.cursor()
3.3 创建表

使用 CREATE TABLE 语句创建表。

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER
)
''')
3.4 插入数据

使用 INSERT INTO 语句插入数据。

cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 30)")
3.5 提交事务

对数据库的修改需要提交事务才能生效。

conn.commit()
3.6 查询数据

使用 SELECT 语句查询数据。

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:print(row)
3.7 更新数据

使用 UPDATE 语句更新数据。

cursor.execute("UPDATE users SET age = 26 WHERE name = 'Alice'")
conn.commit()
3.8 删除数据

使用 DELETE 语句删除数据。

cursor.execute("DELETE FROM users WHERE name = 'Bob'")
conn.commit()
3.9 关闭连接

操作完成后,关闭数据库连接。

conn.close()

4. 完整示例

import sqlite3# 连接数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER
)
''')# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 30)")
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
print("查询结果:")
for row in rows:print(row)# 更新数据
cursor.execute("UPDATE users SET age = 26 WHERE name = 'Alice'")
conn.commit()# 删除数据
cursor.execute("DELETE FROM users WHERE name = 'Bob'")
conn.commit()# 关闭连接
conn.close()

5. 高级操作

5.1 使用参数化查询

参数化查询可以防止 SQL 注入,并提高代码可读性。

name = "Charlie"
age = 35
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))
conn.commit()
5.2 获取单个结果

使用 fetchone() 获取查询结果的第一行。

cursor.execute("SELECT * FROM users WHERE name = 'Alice'")
row = cursor.fetchone()
print(row)
5.3 获取列名

使用 description 属性获取查询结果的列名。

cursor.execute("SELECT * FROM users")
columns = [description[0] for description in cursor.description]
print("列名:", columns)
5.4 使用上下文管理器

使用 with 语句自动管理连接和游标。

with sqlite3.connect('example.db') as conn:cursor = conn.cursor()cursor.execute("SELECT * FROM users")rows = cursor.fetchall()for row in rows:print(row)
5.5 处理异常

在操作数据库时,捕获并处理异常。

try:cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 25)")conn.commit()
except sqlite3.Error as e:print("数据库错误:", e)

6. SQLite3 数据类型

SQLite3 支持以下数据类型:

  • NULL:空值。
  • INTEGER:整数。
  • REAL:浮点数。
  • TEXT:文本字符串。
  • BLOB:二进制数据。

7. SQLite3 常用命令

以下是一些常用的 SQLite3 命令:

  • .tables:列出所有表。
  • .schema [table]:查看表结构。
  • .databases:列出所有数据库。
  • .exit:退出 SQLite3 命令行工具。

8. SQLite3 命令行工具

SQLite3 提供了一个命令行工具,可以直接操作数据库文件。

启动命令行工具
sqlite3 example.db
示例:在命令行中操作数据库
-- 创建表
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);-- 插入数据
INSERT INTO users (name, age) VALUES ('Alice', 25);-- 查询数据
SELECT * FROM users;-- 退出
.exit

9. 总结

SQLite3 是一个简单易用的嵌入式数据库,适合小型应用程序或原型开发。通过 Python 的 sqlite3 模块,你可以轻松地创建、查询、更新和删除数据。掌握 SQLite3 的基本操作后,你可以进一步学习更高级的功能,如事务管理、索引优化等。



二、SQlite3 局限性

SQLite3 是一个轻量级的嵌入式数据库引擎,虽然它非常强大且易于使用,但在某些场景下可能会遇到性能或功能上的限制。以下是 SQLite3 的主要极限和适用场景的分析:


1. 数据库大小限制

  • 理论限制:SQLite3 的数据库大小限制为 140 TB(128 TiB)。
  • 实际限制:受文件系统和磁盘空间的限制。在大多数情况下,SQLite3 的数据库大小不会超过几 GB 到几十 GB。

2. 并发访问限制

  • 写操作并发:SQLite3 使用文件级锁,同一时间只能有一个写操作。如果有多个写操作,后续操作会被阻塞。
  • 读操作并发:多个读操作可以同时进行,但在写操作期间,读操作会被阻塞。
  • 适用场景:适合低并发或单线程访问的场景,如嵌入式设备、桌面应用程序或小型 Web 应用。

3. 性能限制

  • 高并发写操作:由于写操作是串行的,SQLite3 在高并发写操作场景下性能较差。
  • 复杂查询:对于非常复杂的查询(如多表连接、子查询等),SQLite3 的性能可能不如 MySQL 或 PostgreSQL 等数据库。
  • 适用场景:适合数据量较小、查询简单的场景,如本地缓存、配置文件存储或小型应用。

4. 功能限制

  • 存储过程:SQLite3 不支持存储过程。
  • 用户管理:SQLite3 没有用户管理和权限控制功能。
  • 网络访问:SQLite3 是一个本地数据库,不支持远程访问。如果需要远程访问,需要额外的网络层封装。
  • 适用场景:适合不需要高级功能(如存储过程、用户管理)的本地应用。

5. 事务与锁

  • 事务:SQLite3 支持 ACID 事务,但在高并发场景下,事务可能会因为锁争用而变慢。
  • 锁机制:SQLite3 使用文件级锁,而不是行级锁或表级锁,这在高并发场景下可能导致性能瓶颈。
  • 适用场景:适合事务较少或并发度较低的场景。

6. 扩展性

  • 水平扩展:SQLite3 不支持分布式存储或水平扩展。
  • 垂直扩展:可以通过优化查询、使用索引等方式提高性能,但受限于单文件存储和文件级锁。
  • 适用场景:适合单机应用或数据量较小的场景。

7. 适用场景

SQLite3 在以下场景中表现优异:

  • 嵌入式设备:如移动应用、IoT 设备。
  • 桌面应用程序:如本地数据存储、配置文件管理。
  • 原型开发:快速搭建和测试应用程序。
  • 小型 Web 应用:低并发、数据量较小的 Web 应用。

8. 不适用场景

SQLite3 在以下场景中可能不适用:

  • 高并发 Web 应用:如大型电商平台、社交网络。
  • 分布式系统:需要多节点协同工作的系统。
  • 大数据量:数据量超过几十 GB 的场景。
  • 复杂查询:需要频繁执行复杂查询的场景。

9. 优化建议

如果需要在 SQLite3 中处理较大数据量或提高性能,可以考虑以下优化方法:

  • 使用索引:为常用查询字段创建索引。
  • 批量操作:将多个写操作合并为一个事务。
  • 分库分表:将数据分散到多个数据库或表中。
  • 定期清理:删除不需要的数据,减少数据库大小。

10. 总结

SQLite3 是一个轻量级、易用且功能强大的嵌入式数据库,但在高并发、大数据量或复杂查询场景下可能会遇到性能或功能上的限制。选择合适的数据库引擎应根据具体需求来决定:

  • 如果需要轻量级、本地化的解决方案,SQLite3 是一个很好的选择。
  • 如果需要高并发、分布式或高级功能,可以考虑 MySQL、PostgreSQL 或其他数据库引擎。

相关文章:

一、数据库 Sqlite3 资料

SQLite3 教程 SQLite3 是一个轻量级的嵌入式数据库引擎,它不需要单独的服务器进程,数据库直接存储在磁盘文件中。Python 内置了 sqlite3 模块,可以方便地操作 SQLite 数据库。以下是 SQLite3 的详细教程。 1. SQLite3 简介 SQLite3 是一个自…...

Passlib库介绍及使用指南

什么是Passlib? Passlib是一个强大的Python密码哈希库,它支持多种哈希算法和工具。 Passlib不仅提供了易于使用的API,还集成了多种安全特性,如加盐、密钥派生函数等,广泛应用于用户账户系统、敏感数据保护和多因素认证…...

模型选择+过拟合欠拟合

训练误差和泛化误差 训练误差:模型在训练数据上的误差 泛化误差:模型在新数据上的误差 验证数据集:一个用来评估模型好坏的数据集 例如拿出50%的数据作为训练 测试数据集:只能用一次 K则交叉验证 在没有足够数据时使用 算法…...

绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图

clc clear close all %% 读取数据 load(MyColor.mat) %读取颜色包for iloop 1:25 %提取工作表数据data0(iloop) {readtable(data.xlsx,sheet,iloop)}; end%% 解析数据 countzeros(23,14); for iloop 1:25index(iloop) { cell2mat(table2array(data0{1,iloop}(1,1)))};data(i…...

损失函数-二分类和多分类

二分类和多分类的损失函数 二分类 损失函数 L ( y , y ^ ) − ( y l o g ( y ^ ) ) ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y}) -(ylog(\hat{y})) (1-y)log(1-\hat{y}) L(y,y^​)−(ylog(y^​))(1−y)log(1−y^​) 其中真实标签表示为y(取值为 0 或 1&#…...

汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型,识别率89.7%

汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型损坏: 前挡风玻璃(damage-front-windscreen ) 损坏的门 (damaged-d…...

从 Elastic 迁移到 Easysearch 指引

从 Elasticsearch 迁移到 Easysearch 需要考虑多个方面,这取决于当前使用的 Elasticsearch 版本、能容忍的停机时间、应用需求等。在此背景下,我们梳理了一下通用的升级指引,方便大家进行迁移工作。 迁移路径 Elasticsearch 版本快照兼容推…...

Yapi RCE 复现和批量编写

一、漏洞复现 首先祭出fofa,搜索语句为 app"yapi",但是为了避开国内,所以使用 app"yapi" && country"SG",SG为新加坡,结果如图 虽然有30页,但是能利用的可能也没几…...

【2024年-9月-21日-开源社区openEuler实践记录】PilotGo:简化运维管理的开源利器

开篇介绍 大家好,我是 fzr123。在运维领域摸爬滚打许久,我发现了PilotGo这个超实用的开源项目,它正悄然改变着运维人员处理日常任务的方式,为复杂的运维管理工作带来了极大的便利与效率提升。 技术亮点 1. 自动化运维任务编排 …...

ubuntu 20.04 国内源安装docker

先更新软件包,安装备要apt软件 # 更新软件包索引 sudo apt-get update# 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release使用阿里云源 # 添加阿里云官方GPG密钥 curl -fsSL http://mirrors.aliyun.co…...

比亚迪30亿教育慈善基金正式启动,助推中国科教进步

12月30日,比亚迪在深圳总部举行了30亿教育慈善基金启动仪式,比亚迪股份有限公司董事长兼总裁王传福与来自全国的35所高校代表及28所科技馆、博物馆代表共同启动比亚迪30亿教育慈善基金捐赠,推动中国科教进步。 捐资30亿教育慈善基金&#xf…...

【链表】重排链表,看似复杂实则并不简单~

文章目录 143. 重排链表解题思路 143. 重排链表 143. 重排链表 ​ 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln​ 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …​ 不能…...

yakit-靶场-高级前端加解密与验签实战(for嵌套纯享版)

高级前端加解密与验签实战 一、前端验证签名(验签)表单:HMAC-SHA256 使用hmac-sha256的十六进制key值可以加密 与页面加密后的值相同 热加载: encryptData func(p) { //sha256key值key codec.DecodeHex("313233343132333…...

洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

题解&#xff1a; #include<iostream> #include<vector> //定义二维数组&#xff0c;直接标识不同出法相应对应关系 int mark[5][5]{{0,-1,1,1,-1},{1,0,-1,1,-1},{-1,1,0,-1,1},{-1,-1,1,0,1},{1,1,-1,-1,0}}; void JudgeScore(int A,int B,int& countA,int&…...

NLP论文速读(NeurIPS 2024)|BERT作为生成式上下文学习者BERTs are Generative In-Context Learners

论文速读|BERTs are Generative In-Context Learners 论文信息&#xff1a; 简介&#xff1a; 本文探讨了在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;上下文学习&#xff08;in-context learning&#xff09;的能力&#xff0c;这通常与因果语言模型&#x…...

亚马逊云科技 | Amazon Nova:智能技术新势力

在2024年亚马逊云科技re:invent大会上&#xff0c;Amazon Nova 系列自研生成式 AI 多模态模型重磅登场&#xff0c;新一代的AI产品-Amazon Nova&#xff0c;隶属于 Amazon Bedrock&#xff0c;一共发布6款大模型&#xff0c;精准切入不同领域&#xff0c;解锁多元业务可能&…...

Kali 自动化换源脚本编写与使用

1. 背景与需求 在使用 Kali Linux 的过程中&#xff0c;软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包&#xff0c;但有时由于网络条件或地理位置的限制&#xff0c;使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…...

【已解决】PDF文档有密码怎么办(2024新)免费在线工具PDF2Go

强大的解密工具PDF2Go使用指南 一、PDF2Go简介 PDF2Go是由德国QaamGo公司开发的在线PDF工具箱&#xff0c;以其强大的功能和用户友好的界面而闻名。它不仅免费&#xff0c;而且不需要用户注册或安装任何软件&#xff0c;只需打开浏览器即可使用。 二、功能特点 1. 免费且无需…...

华为ensp-BGP联盟

学习新思想&#xff0c;争做新青年&#xff0c;今天学习BGP联盟 实验介绍 一个BGP联盟是一个具有内部层次结构的AS。一个BGP联盟由若干个子AS 组成&#xff0c;子AS也称为成员AS。对于一个BGP联盟&#xff0c;其成员AS内部的各路由器之间需要建立全互联的IBGP邻居关系或使用B…...

ArcGIS中怎么进行水文分析?(思路介绍)

最近有人咨询&#xff0c;ArcGIS中怎么进行水文分析&#xff0c;大致的说一下河网提取的思路哈 解决思路&#xff1a;dem填洼→计算水流方向→计算水流累积矩阵→形成河网 dem填洼 计算水流方向 计算水流累积矩阵 用栅格计算器&#xff0c;设阈值&#xff08;自己多次尝试&…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...