SQLite的入门级项目学习记录(一)

devtools/2024/11/13 9:46:20/

        从来没有接触过数据库,但是最近有个项目要用到,从0开始记录一下学习的过程,以备忘。

python常见的几个免费数据库        

        在 Python 中,有几个流行的免费数据库选项,可以根据项目需求选择使用。以下是一些常见的免费数据库及其特点:
SQLite
        特点:轻量级、嵌入式数据库,数据存储在一个文件中。
        适用场景:适合小型应用、桌面应用或需要轻量级存储的项目。
        Python 支持:Python 标准库中包含 sqlite3 模块,使用起来非常方便。
PostgreSQL
        
特点:功能强大、开源的关系型数据库,支持复杂查询、事务、扩展。
        适用场景:适合中到大型应用,需要复杂数据操作和高并发处理的项目。
        Python 支持:可以使用 psycopg2 或 asyncpg 等库进行连接和操作。
MySQL/MariaDB
        
特点:开源的关系型数据库,MySQL 是商业版,而 MariaDB 是其社区版的分支。
        适用场景:广泛应用于各种规模的应用,支持高性能和可扩展性。
        Python 支持:可以使用 mysql-connector-python、PyMySQL 或 mysqlclient 等库进行连接和操作。
MongoDB
        
特点:开源的 NoSQL 文档数据库,数据以 BSON 格式存储,支持灵活的数据模型。
        适用场景:适合需要处理大量非结构化数据和大规模数据存储的应用。
        Python 支持:可以使用 pymongo 库进行连接和操作。
Redis
        
特点:开源的内存数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合等)。
        适用场景:适用于缓存、实时数据处理和高性能数据存储需求。
        Python 支持:可以使用 redis-py 库进行连接和操作。
        这些数据库都有丰富的 Python 库支持,使得与数据库的交互变得相对简单。选择哪种数据库取决于具体的应用需求和数据处理要求。综合以上,决定使用SQLite。

SQLite

        SQLite 是一个适合多种场景的数据库,包括实时改变和存取数据的情况。
        SQLite 是嵌入式数据库,它的数据存储在一个单一的文件中,这使得它的使用非常方便。        
        SQLite 提供了高度的写入并发能力,并且在设计时就考虑到了实时访问的支持。
        SQLite 的性能也是非常好的,尤其是对于不需要大量并发写操作的小型到中型的应用。对于更复杂的查询或大量写操作,SQLite 的性能可能会受到影响,因为它的并发写机制是通过序列化写操作来实现的。然而,对于大多数实时应用来说,SQLite 通常已经足够使用。

基本功能和框架的规划

根据别人的demo和AI提供的教程,进行基本框架的规划   

 1、SQLite基本功能的demo

import sqlite3# 创建数据库连接
conn = sqlite3.connect('example.db')# 创建游标
cursor = conn.cursor()# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,email TEXT NOT NULL UNIQUE
)
''')# 插入数据
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('张三', 'zhangsan@example.com'))
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('李四', 'lisi@example.com'))# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()# 打印查询结果
for row in rows:print(row)# 关闭游标和连接
cursor.close()
conn.close()

        总结一下:创建连接⇒创建连接的游标⇒创建表(如果表不存在)⇒插入数据⇒提交事务⇒查询数据⇒关闭游标和连接。这就是SQLite的大致套路了。

2、数据的批量存储

        本项目需要实时连续存储一个变量,每秒钟大约有十几个值,如果每次的新数据都实时写入数据库,会带来性能和资源的浪费。因此,需要定期或者定批写入数据。设数据池,当数据池的数据元素数量达到批写入设定阈值或者周期写入定时器超时,就将数据写入数据库并清空数据池。

3、使用长连接 

        由于数据更新频率很高,使用长时间运行的连接来减少连接开销。 

4、数据的字段

        这个项目只需要记录实时变化的变量即可,无需进行关联搜索查询,所以无需增加用以区分的ID和戳,仅仅记录变量的实际值即可。

5、异步写入

        将数据插入操作异步化,通过在后台线程或进程中处理数据插入,可以避免阻塞主线程。

6、 数据归档和维护

        定期归档:对于高频率的实时数据存储,数据量可能会迅速增加。考虑定期将数据归档到另一个数据库或文件中,以便保持数据库的性能。  

        数据清理:根据需要定期清理旧的数据或将其移动到存档表中。

7、处理异常、优化性能

        在使用中再持续改进。

  


http://www.ppmy.cn/devtools/113159.html

相关文章

模拟面试后端开发复盘

目录 一:项目的系统开发和设计思路 二:Java的反射是什么?在项目中有用到吗? 三:多态的实现原理 四:项目中的redis是用在了哪里 五:Session和Cookie的区别,Cookie可以被修改吗&a…

JAVA算法数据结构第一节稀疏矩阵

一、稀疏矩阵介绍: 稀疏矩阵是一种特殊类型的矩阵,其中大部分元素都是零。在处理这类矩阵时,如果仍然使用标准的矩阵存储方式(即传统的二维数组),则会浪费大量的存储空间来保存零值。为了提高存储效率以及…

DAY20240909 VUE:编程式导航,动态路由,命名路由

VUE:编程式导航,动态路由,命名路由 一、点击‘正在热映’列表能跳到对应详情1编程式导航创建新组件---详情Datail.vue组件模拟正在热映电影 列表页面为Datail.vue组件 配置路由、引入路由使用vue里的编程式导航方案实现点击列表跳转detail页面里 2动态路…

MATLAB 从 R2024B 开始支持树莓派 5

树莓派(Raspberry Pi)系列是一系列基于单板计算机的微型电脑,由英国的树莓派基金会于 2012 年开始发布。它的目标是提供一个低成本、易于学习和玩耍的平台,用于教育和初学者学习计算机科学和编程。 目前市面上,最新最…

el-table使用合计和固定列时,滚动条被覆盖区域无法拖拽问题

pointer-events文档 解决思路为通过pointer-events实现事件穿透,不响应固定列的拖拽,而是响应其子元素的拖拽事件 /deep/.el-table__fixed, /deep/.el-table__fixed-right {pointer-events: none; } /deep/.el-table__fixed *, /deep/.el-table__fixed-…

SQL,从每组中的 json 字段中提取唯一值

postgreySQL 库表的第 1 列是 ID,用于排序;第 2 列是分类;第 3 列类似 json(非标准 json), 并存在重复项。 idcomponent_typecomponent_names1INGESTION{ingestiona,atul, ingestiona, ingestionb}2INGESTION{test_s3…

获取无人机经纬度是否在指定禁飞区内

1. 计算公式: (AB X AE ) * (CD X CE) >= 0 && (DA X DE ) * (BC X BE) >= 0 参考: 判断点是否在矩形框(多边形)内_qt opencv 判断一点是否在矩形内-CSDN博客 2.测试结果: 3.实现完整代码: #include<cstd

【MySQL】了解并操作MySQL的缓存配置与信息

目录 一、查看缓存配置 二、查看缓存信息 查询MySQL的缓存相关信息&#xff0c;一般我们用两个命令&#xff1a; show variables like %query_cache%; show status like %qcache%; 一、查看缓存配置 查看缓存配置的相关的系统变量变量&#xff0c;返回给我们服务器缓存的配置…