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

从来没有接触过数据库,但是最近有个项目要用到,从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

python 复制代码
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 (?, ?)", ('张三', '[email protected]'))
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('李四', '[email protected]'))

# 提交事务
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、处理异常、优化性能

在使用中再持续改进。

相关推荐
XiaoLeisj30 分钟前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
dleei1 小时前
MySql安装及SQL语句
数据库·后端·mysql
信徒_2 小时前
Mysql 在什么样的情况下会产生死锁?
android·数据库·mysql
嘴对嘴编程3 小时前
oracle数据泵操作
数据库·oracle
·薯条大王9 小时前
MySQL联合查询
数据库·mysql
morris13111 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch11 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
这个懒人12 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog
Yan-英杰12 小时前
【百日精通JAVA | SQL篇 | 第二篇】数据库操作
服务器·数据库·sql
NineData12 小时前
NineData云原生智能数据管理平台新功能发布|2025年3月版
数据库