从来没有接触过数据库,但是最近有个项目要用到,从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 (?, ?)", ('张三', '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、处理异常、优化性能
在使用中再持续改进。