当前位置: 代码网 > it编程>前端脚本>Python > Python项目适用的轻量级和嵌入式数据库汇总

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

2025年12月05日 Python 我要评论
除了sqlite,python还有许多其他轻量级和嵌入式数据库选项。以下是详细分类介绍:1.嵌入式/文件型数据库a)tinydb(纯python, nosql)# 安装: pip install ti

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

1.嵌入式/文件型数据库

a)tinydb(纯python, nosql)

# 安装: 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格式存储
  • 无外部依赖
  • 支持查询和索引
  • 适合小型项目、配置存储

b)pickledb(基于pickle的键值存储)

# 安装: pip install pickledb
import pickledb

db = pickledb.load('example.db', false)
db.set('key', 'value')
value = db.get('key')

c)shelve(python标准库)

import shelve

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

d)duckdb(高性能分析型数据库)

# 安装: 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倍

e)unqlite(键值/文档存储)

# 安装: pip install unqlite
import unqlite

db = unqlite.unqlite('mydb.db')
db['key1'] = 'value1'  # 键值存储
db.store('users', {'name': 'john'})  # 文档存储

2.客户端-服务器轻量级数据库

a)sqlite (网络版) - rqlite

# 需要安装rqlite服务器
# pip install rqlite-python
import rqlite

conn = rqlite.connect('http://localhost:4001')
conn.execute('create table users (id integer, name text)')

b)pocketbase(后端即服务)

# 需要pocketbase服务
# pip install pocketbase
from pocketbase import pocketbase

client = pocketbase('http://127.0.0.1:8090')
records = client.collection('posts').get_list()

3.时序数据库

a)questdb

# 安装: 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()

b)timescaledb(postgresql扩展)

# 基于postgresql,但针对时序优化
# pip install psycopg2
import psycopg2

conn = psycopg2.connect("dbname=tsdb user=postgres")

4.内存数据库

a)redis(键值存储)

# 安装: pip install redis
import redis

r = redis.redis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')
value = r.get('foo')

b)memcached

# 安装: 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")

5.python原生数据库

a)zodb(对象数据库)

# 安装: 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()

b)metakit(嵌入式)

# 安装可能较复杂,需编译
import metakit

db = metakit.storage('data.mk')
view = db.getas('users[name:s,age:i]')
view.append(name='john', age=30)

6.特殊用途数据库

a)codernitydb(纯python实现)

# 安装: pip install codernitydb
from codernitydb.database import database

db = database('/tmp/test')
db.create()

b)kyoto cabinet(键值存储)

# 安装: pip install kyotocabinet
import kyotocabinet

db = kyotocabinet.db()
db.open('test.kch', kyotocabinet.db.owriter | kyotocabinet.db.ocreate)
db.set('key', 'value')

7.newsql/分布式轻量级

a)tidb(兼容mysql的分布式)

# 安装mysql客户端
# pip install pymysql
import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=4000,
    user='root',
    database='test'
)

b)cockroachdb

# 安装: pip install psycopg2
import psycopg2

conn = psycopg2.connect(
    host='localhost',
    port=26257,
    user='root',
    database='defaultdb'
)

选择建议表格

数据库类型适合场景特点
sqlitesql/嵌入式本地应用、移动应用零配置、单文件
tinydbnosql/json小型项目、配置存储纯python、简单
duckdbsql/分析型数据分析、olap列式存储、高性能
unqlite键值/文档简单存储需求支持json
redis键值/内存缓存、会话存储高性能、支持数据结构
zodb对象数据库python对象存储直接存储python对象
shelve键值/标准库简单持久化python自带、简单
rqlitesql/分布式需要复制的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')

web应用:

# 主数据库: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()

嵌入式/iot:

# 使用sqlite(资源占用小)
# 或tinydb(无依赖)

注意事项

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

  • 零配置
  • 单文件
  • acid事务
  • 标准sql支持
  • python标准库支持

考虑因素

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

迁移成本

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

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

  • 首选sqlite - 80%的场景都适用
  • 数据分析选duckdb - 比sqlite在某些查询上快100倍
  • 简单存储选tinydb - 不需要sql时
  • 缓存选redis - 需要高性能缓存时

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com