Python项目适用的轻量级和嵌入式数据库汇总

Written by

in

文章目录
  • 数据库 类型 适合场景 特点 SQLite SQL/嵌入式 本地应用、移动应用 零配置、单文件 TinyDB NoSQL/JSON 小型项目、配置存储 纯Python、简单 DuckDB SQL/分析型 数据分析、OLAP 列式存储、高性能 UnQLite 键值/文档 简单存储需求 支持JSON Redis 键值/内存 缓存、会话存储 高性能、支持数据结构 ZODB 对象数据库 Python对象存储 直接存储Python对象 Shelve 键值/标准库 简单持久化 Python自带、简单 rqlite SQL/分布式 需要复制的SQLite 基于Raft、分布式
  • “”” 不同场景下的数据库选择示例 “”” def scenario_based_selection(): print(“根据使用场景选择数据库:”) scenarios = { “移动应用/桌面应用”: “SQLite”, “Web应用缓存”: “Redis”, “小型项目原型”: “TinyDB”, “数据分析/OLAP”: “DuckDB”, “需要分布式”: “rqlite 或 TiDB”, “存储Python对象”: “ZODB 或 Shelve”, “时序数据”: “QuestDB 或 TimescaleDB”, “键值存储”: “UnQLite 或 Kyoto Cabinet”, “纯内存操作”: “Python字典 + pickle”, “需要完整SQL功能”: “SQLite”, “文档存储”: “TinyDB”, “需要事务支持”: “SQLite”, “零依赖部署”: “SQLite 或 TinyDB”, “高并发读写”: “Redis”, “持久化缓存”: “Shelve”, “配置存储”: “JSON文件 或 TinyDB” } for scenario, recommendation in scenarios.items(): print(f” {scenario:25} → {recommendation}”) # 快速选择指南函数 def quick_selection_guide(): “”” 快速选择指南 “”” questions = [ (“需要完整SQL支持吗?”, {“是”: [“SQLite”, “DuckDB”], “否”: [“TinyDB”, “Redis”]}), (“数据量有多大?”, {“<100MB”: [“SQLite”, “TinyDB”], “>100MB”: [“DuckDB”, “外部数据库”]}), (“需要网络访问吗?”, {“是”: [“Redis”, “rqlite”], “否”: [“SQLite”, “TinyDB”]}), (“性能要求高吗?”, {“是”: [“DuckDB”, “Redis”], “否”: [“SQLite”, “TinyDB”]}), (“需要事务支持吗?”, {“是”: [“SQLite”, “DuckDB”], “否”: [“TinyDB”, “Redis”]}), (“部署环境有限制吗?”, {“是”: [“SQLite”, “TinyDB”], “否”: “所有选择”}), (“主要做什么操作?”, { “查询分析”: [“DuckDB”], “缓存”: [“Redis”], “简单存储”: [“TinyDB”, “Shelve”], “复杂关系”: [“SQLite”] }) ] return questions if __name__ == “__main__”: scenario_based_selection() print(“n推荐选择优先级:”) print(“1. 首选SQLite – 成熟稳定,功能完整”) print(“2. 考虑DuckDB – 数据分析场景”) print(“3. 选择TinyDB – 简单JSON存储需求”) print(“4. 使用Redis – 缓存和高并发场景”) print(“5. 尝试ZODB – 需要直接存储Python对象时”)
  • SQLite仍然是最佳通用选择,因为: 零配置 单文件 ACID事务 标准SQL支持 Python标准库支持 考虑因素: 数据量大小 并发需求 查询复杂度 部署环境限制 开发团队熟悉度 迁移成本: 从SQLite迁移到其他数据库相对容易 从小型数据库迁移到大型数据库比反向迁移容易 总的来说,对于大多数Python项目: 首选SQLite – 80%的场景都适用 数据分析选DuckDB – 比SQLite在某些查询上快100倍 简单存储选TinyDB – 不需要SQL时 缓存选Redis – 需要高性能缓存时 以上就是Python项目适用的轻量级和嵌入式数据库汇总的详细内容,更多关于Python轻量级和嵌入式数据库的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: python TinyDB轻量级文档导向数据库轻松存储访问 基于Python的SQL Server数据库实现对象同步轻量级 Python轻量级ORM框架Peewee访问sqlite数据库的方法详解 windows python嵌入式安装全过程 浅谈一下Python究竟属不属于嵌入式语言
  • 目录
    • 1.嵌入式/文件型数据库
      • a)TinyDB(纯Python, NoSQL)
      • b)PickleDB(基于pickle的键值存储)
      • c)Shelve(Python标准库)
      • d)DuckDB(高性能分析型数据库)
      • e)UnQLite(键值/文档存储)
    • 2.客户端-服务器轻量级数据库
      • a)SQLite (网络版) – rqlite
      • b)PocketBase(后端即服务)
    • 3.时序数据库
      • a)QuestDB
      • b)TimescaleDB(PostgreSQL扩展)
    • 4.内存数据库
      • a)Redis(键值存储)
      • b)Memcached
    • 5.Python原生数据库
      • a)ZODB(对象数据库)
      • b)Metakit(嵌入式)
    • 6.特殊用途数据库
      • a)CodernityDB(纯Python实现)
      • b)Kyoto Cabinet(键值存储)
    • 7.NewSQL/分布式轻量级
      • a)TiDB(兼容MySQL的分布式)
      • b)CockroachDB
    • 选择建议表格
      • 综合示例:根据场景选择
        • 实际项目建议
          • 小型项目/原型开发:
          • Web应用:
          • 数据分析:
          • 嵌入式/IoT:
        • 注意事项

          除了SQLite,Python还有许多其他轻量级和嵌入式数据库选项。以下是详细分类介绍:

          # 安装: pip install tinydb
          from tinydb import TinyDB, Query
          
          # 使用示例
          db = TinyDB('db.json')
          db.insert({'name': 'John', 'age': 30})
          results = db.search(Query().age > 25)
          

          特点

          • JSON格式存储
          • 无外部依赖
          • 支持查询和索引
          • 适合小型项目、配置存储

          # 安装: pip install pickledb
          import pickledb
          
          db = pickledb.load('example.db', False)
          db.set('key', 'value')
          value = db.get('key')
          

          import shelve
          
          with shelve.open('mydata') as db:
              db['key1'] = {'name': 'Alice', 'age': 25}
              data = db['key1']  # 读取数据
          

          # 安装: pip install duckdb
          import duckdb
          
          # 内存数据库
          conn = duckdb.connect(':memory:')
          # 或文件数据库
          conn = duckdb.connect('mydb.duckdb')
          
          conn.execute("CREATE TABLE users (id INTEGER, name VARCHAR)")
          conn.execute("INSERT INTO users VALUES (1, 'Alice')")
          result = conn.execute("SELECT * FROM users").fetchall()
          

          特点

          • 列式存储
          • OLAP优化
          • SQL支持完整
          • 比SQLite在某些分析查询上快100倍

          # 安装: pip install unqlite
          import unqlite
          
          db = unqlite.UnQLite('mydb.db')
          db['key1'] = 'value1'  # 键值存储
          db.store('users', {'name': 'John'})  # 文档存储
          

          # 需要安装rqlite服务器
          # pip install rqlite-python
          import rqlite
          
          conn = rqlite.connect('http://localhost:4001')
          conn.execute('CREATE TABLE users (id INTEGER, name TEXT)')
          

          # 需要PocketBase服务
          # pip install pocketbase
          from pocketbase import PocketBase
          
          client = PocketBase('http://127.0.0.1:8090')
          records = client.collection('posts').get_list()
          

          # 安装: pip install questdb
          from questdb.ingress import Sender, IngressError
          
          sender = Sender('localhost', 9009)
          sender.row(
              'weather',
              symbols={'city': 'London'},
              columns={'temperature': 23.5, 'humidity': 0.49}
          )
          sender.flush()
          

          # 基于PostgreSQL,但针对时序优化
          # pip install psycopg2
          import psycopg2
          
          conn = psycopg2.connect("dbname=tsdb user=postgres")
          

          # 安装: pip install redis
          import redis
          
          r = redis.Redis(host='localhost', port=6379, db=0)
          r.set('foo', 'bar')
          value = r.get('foo')
          

          # 安装: pip install python-memcached
          import memcache
          
          mc = memcache.Client(['127.0.0.1:11211'], debug=0)
          mc.set("some_key", "Some value")
          value = mc.get("some_key")
          

          # 安装: pip install ZODB
          from ZODB import DB
          import transaction
          
          db = DB('mydatabase.fs')
          conn = db.open()
          root = conn.root()
          
          root['users'] = ['Alice', 'Bob']
          transaction.commit()
          

          # 安装可能较复杂,需编译
          import metakit
          
          db = metakit.storage('data.mk')
          view = db.getas('users[name:S,age:I]')
          view.append(name='John', age=30)
          

          # 安装: pip install CodernityDB
          from CodernityDB.database import Database
          
          db = Database('/tmp/test')
          db.create()
          

          # 安装: pip install kyotocabinet
          import kyotocabinet
          
          db = kyotocabinet.DB()
          db.open('test.kch', kyotocabinet.DB.OWRITER | kyotocabinet.DB.OCREATE)
          db.set('key', 'value')
          

          # 安装MySQL客户端
          # pip install PyMySQL
          import pymysql
          
          conn = pymysql.connect(
              host='127.0.0.1',
              port=4000,
              user='root',
              database='test'
          )
          

          # 安装: pip install psycopg2
          import psycopg2
          
          conn = psycopg2.connect(
              host='localhost',
              port=26257,
              user='root',
              database='defaultdb'
          )
          

          数据库 类型 适合场景 特点
          SQLite SQL/嵌入式 本地应用、移动应用 零配置、单文件
          TinyDB NoSQL/JSON 小型项目、配置存储 纯Python、简单
          DuckDB SQL/分析型 数据分析、OLAP 列式存储、高性能
          UnQLite 键值/文档 简单存储需求 支持JSON
          Redis 键值/内存 缓存、会话存储 高性能、支持数据结构
          ZODB 对象数据库 Python对象存储 直接存储Python对象
          Shelve 键值/标准库 简单持久化 Python自带、简单
          rqlite SQL/分布式 需要复制的SQLite 基于Raft、分布式

          """
          不同场景下的数据库选择示例
          """
          
          def scenario_based_selection():
              print("根据使用场景选择数据库:")
              
              scenarios = {
                  "移动应用/桌面应用": "SQLite",
                  "Web应用缓存": "Redis",
                  "小型项目原型": "TinyDB",
                  "数据分析/OLAP": "DuckDB",
                  "需要分布式": "rqlite 或 TiDB",
                  "存储Python对象": "ZODB 或 Shelve",
                  "时序数据": "QuestDB 或 TimescaleDB",
                  "键值存储": "UnQLite 或 Kyoto Cabinet",
                  "纯内存操作": "Python字典 + pickle",
                  "需要完整SQL功能": "SQLite",
                  "文档存储": "TinyDB",
                  "需要事务支持": "SQLite",
                  "零依赖部署": "SQLite 或 TinyDB",
                  "高并发读写": "Redis",
                  "持久化缓存": "Shelve",
                  "配置存储": "JSON文件 或 TinyDB"
              }
              
              for scenario, recommendation in scenarios.items():
                  print(f"  {scenario:25} → {recommendation}")
          
          # 快速选择指南函数
          def quick_selection_guide():
              """
              快速选择指南
              """
              questions = [
                  ("需要完整SQL支持吗?", {"是": ["SQLite", "DuckDB"], "否": ["TinyDB", "Redis"]}),
                  ("数据量有多大?", {"<100MB": ["SQLite", "TinyDB"], ">100MB": ["DuckDB", "外部数据库"]}),
                  ("需要网络访问吗?", {"是": ["Redis", "rqlite"], "否": ["SQLite", "TinyDB"]}),
                  ("性能要求高吗?", {"是": ["DuckDB", "Redis"], "否": ["SQLite", "TinyDB"]}),
                  ("需要事务支持吗?", {"是": ["SQLite", "DuckDB"], "否": ["TinyDB", "Redis"]}),
                  ("部署环境有限制吗?", {"是": ["SQLite", "TinyDB"], "否": "所有选择"}),
                  ("主要做什么操作?", {
                      "查询分析": ["DuckDB"],
                      "缓存": ["Redis"],
                      "简单存储": ["TinyDB", "Shelve"],
                      "复杂关系": ["SQLite"]
                  })
              ]
              
              return questions
          
          if __name__ == "__main__":
              scenario_based_selection()
              
              print("n推荐选择优先级:")
              print("1. 首选SQLite - 成熟稳定,功能完整")
              print("2. 考虑DuckDB - 数据分析场景")
              print("3. 选择TinyDB - 简单JSON存储需求")
              print("4. 使用Redis - 缓存和高并发场景")
              print("5. 尝试ZODB - 需要直接存储Python对象时")
          

          # 方案1:SQLite(最通用)
          import sqlite3
          conn = sqlite3.connect('app.db')
          
          # 方案2:TinyDB(更简单)
          from tinydb import TinyDB
          db = TinyDB('db.json')
          
          # 方案3:DuckDB(数据分析)
          import duckdb
          conn = duckdb.connect('analytics.db')
          

          # 主数据库:SQLite/PostgreSQL
          # 缓存:Redis
          # 会话存储:Redis或SQLite
          

          # 首选DuckDB,次选SQLite
          import duckdb
          import pandas as pd
          
          # 直接在Pandas DataFrame上查询
          df = pd.read_csv('data.csv')
          result = duckdb.query("SELECT * FROM df WHERE column > 100").df()
          

          # 使用SQLite(资源占用小)
          # 或TinyDB(无依赖)
          

          SQLite仍然是最佳通用选择,因为:

          • 零配置
          • 单文件
          • ACID事务
          • 标准SQL支持
          • Python标准库支持

          考虑因素

          • 数据量大小
          • 并发需求
          • 查询复杂度
          • 部署环境限制
          • 开发团队熟悉度

          迁移成本

          • 从SQLite迁移到其他数据库相对容易
          • 从小型数据库迁移到大型数据库比反向迁移容易

          总的来说,对于大多数Python项目:

          • 首选SQLite – 80%的场景都适用
          • 数据分析选DuckDB – 比SQLite在某些查询上快100倍
          • 简单存储选TinyDB – 不需要SQL时
          • 缓存选Redis – 需要高性能缓存时

          以上就是Python项目适用的轻量级和嵌入式数据库汇总的详细内容,更多关于Python轻量级和嵌入式数据库的资料请关注风君子博客其它相关文章!

          您可能感兴趣的文章:

          • python TinyDB轻量级文档导向数据库轻松存储访问
          • 基于Python的SQL Server数据库实现对象同步轻量级
          • Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
          • windows python嵌入式安装全过程
          • 浅谈一下Python究竟属不属于嵌入式语言

          站内搜索