示例集合¶
概述¶
本目录包含 SQLAlchemy CouchDB 方言的完整示例,涵盖从基础用法到高级特性的各种场景。
示例列表¶
基础示例¶
1. 基础同步操作¶
文件: examples/basic_sync.py
演示基本的同步 CRUD 操作:
- 连接 CouchDB
- 插入文档
- 查询文档
- 更新文档
- 删除文档
from sqlalchemy import create_engine, text
# 创建引擎
engine = create_engine('couchdb://admin:password@localhost:5984/mydb')
# 使用连接
with engine.connect() as conn:
# 插入
conn.execute(text("""
INSERT INTO users (_id, name, age, type)
VALUES (:id, :name, :age, 'user')
"""), {
'id': 'user:1',
'name': 'Alice',
'age': 30
})
# 查询
result = conn.execute(text("SELECT * FROM users WHERE type = 'user'"))
for row in result:
print(f"{row.name}: {row.age}")
conn.commit()
运行方式:
2. 基础异步操作¶
文件: examples/basic_async.py
演示异步操作:
- 创建异步引擎
- 异步 CRUD 操作
- 并发查询
- 错误处理
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import text
async def main():
# 创建异步引擎
engine = create_async_engine('couchdb+async://admin:password@localhost:5984/mydb')
async with engine.connect() as conn:
# 插入
await conn.execute(text("""
INSERT INTO users (_id, name, age, type)
VALUES (:id, :name, :age, 'user')
"""), {
'id': 'user:async:1',
'name': 'Bob Async',
'age': 25
})
# 查询
result = await conn.execute(text("""
SELECT * FROM users WHERE type = 'user'
"""))
# 注意:使用同步迭代(结果已缓存)
for row in result:
print(f"{row.name}: {row.age}")
await conn.commit()
await engine.dispose()
asyncio.run(main())
运行方式:
3. 完整示例¶
文件: examples/async_example.py
完整的异步应用示例:
- 复杂查询
- 事务管理
- 错误处理
- 性能优化
高级示例¶
1. 高级特性演示¶
文件: examples/advanced_features.py
演示高级特性:
- 复杂查询条件
- 批量操作
- 索引优化
- 性能监控
from sqlalchemy import text
from datetime import datetime
# 复杂查询
result = conn.execute(text("""
SELECT * FROM users
WHERE type = 'user'
AND age > 25
AND age < 35
AND name LIKE 'A%'
ORDER BY age DESC
LIMIT 10
"""))
# 批量插入
users_data = [
{'id': f'user:{i}', 'name': f'User{i}', 'age': 20 + i, 'type': 'user'}
for i in range(100)
]
conn.execute(text("""
INSERT INTO users (_id, name, age, type)
VALUES (:id, :name, :age, 'user')
"""), users_data)
conn.commit()
2. 性能基准测试¶
文件: examples/performance_benchmark.py
性能测试和基准:
- CRUD 操作性能测试
- 批量操作性能
- 并发查询性能
- 内存使用测试
import time
from contextlib import contextmanager
@contextmanager
def timer():
start = time.time()
yield
elapsed = time.time() - start
print(f"耗时: {elapsed:.3f}s")
# 测试批量插入
with timer():
conn.execute(text("""
INSERT INTO users (_id, name, age, type)
VALUES (:id, :name, :age, 'user')
"""), users_data)
conn.commit()
print(f"插入 {len(users_data)} 条记录,吞吐量: {len(users_data)/elapsed:.1f} docs/s")
ORM 示例¶
1. 声明式模型¶
文件: examples/orm_example.py
注意: ORM 支持将在 Phase 3 中实现
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer
from sqlalchemy_couchdb.types import CouchDBString, CouchDBInteger
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
_id = Column(String, primary_key=True)
name = Column(CouchDBString(255))
age = Column(CouchDBInteger())
type = Column(CouchDBString(50))
# 使用 ORM
user = User(_id='user:orm:1', name='ORM User', age=30, type='user')
session.add(user)
session.commit()
Phase 2 混合模式示例¶
1. 智能查询路由¶
文件: examples/hybrid_routing.py
注意: 混合模式将在 Phase 2 中实现
from sqlalchemy import create_engine
# 创建混合引擎
engine = create_engine(
'couchdb+hybrid://admin:password@localhost:5984/mydb'
'?secondary_db=postgresql://user:pass@localhost:5432/mydb'
)
# 简单查询 → CouchDB
result = conn.execute(text("""
SELECT * FROM users WHERE age > 25
"""))
# 复杂查询 → PostgreSQL
result = conn.execute(text("""
SELECT u.name, COUNT(o.id) as order_count
FROM users u
JOIN orders o ON u.id = o.user_id
GROUP BY u.name
"""))
2. 双写机制¶
文件: examples/dual_write.py
演示双写机制:
- 同时写入 CouchDB 和 PostgreSQL
- 一致性检查
- 错误处理
from sqlalchemy import text
# 双写
with engine.connect() as conn:
try:
conn.execute(text("""
INSERT INTO users (_id, name, age, type)
VALUES (:id, :name, :age, 'user')
"""), {
'id': 'user:dual:1',
'name': 'Dual Write User',
'age': 28
})
conn.commit()
print("✅ 双写成功")
except Exception as e:
conn.rollback()
print(f"❌ 双写失败: {e}")
示例数据¶
示例数据集¶
运行示例前,可以加载示例数据:
这会创建包含以下数据的测试数据库:
- 100 个用户
- 500 个订单
- 1000 个产品
清理示例数据¶
最佳实践示例¶
1. 连接管理¶
最佳实践: 使用上下文管理器
# ✅ 推荐
with engine.connect() as conn:
conn.execute(text("..."))
conn.commit()
# ❌ 不推荐
conn = engine.connect()
conn.execute(text("..."))
conn.commit()
conn.close()
2. 错误处理¶
最佳实践: 捕获特定异常
from sqlalchemy_couchdb.exceptions import (
NotFoundError,
DocumentConflictError,
CouchDBError
)
try:
conn.execute(text("UPDATE ..."))
conn.commit()
except NotFoundError:
print("文档不存在")
except DocumentConflictError:
print("文档版本冲突")
except CouchDBError as e:
print(f"CouchDB 错误: {e}")
3. 性能优化¶
最佳实践: 批量操作
# ✅ 批量插入
data = [{...}, {...}, ...]
conn.execute(text("INSERT INTO ..."), data)
# ❌ 循环插入
for item in data:
conn.execute(text("INSERT INTO ..."), item)
运行示例¶
环境准备¶
# 1. 启动 CouchDB
docker run -d -p 5984:5984 \
-e COUCHDB_USER=admin \
-e COUCHDB_PASSWORD=password \
couchdb:3
# 2. 创建数据库
curl -X PUT http://admin:password@localhost:5984/examples
# 3. 安装依赖
pip install -e ".[dev]"
# 4. 运行示例
python examples/basic_sync.py
完整示例列表¶
# 基础示例
python examples/basic_sync.py # 同步操作
python examples/basic_async.py # 异步操作
python examples/async_example.py # 完整异步示例
# 高级示例
python examples/advanced_features.py # 高级特性
python examples/performance_benchmark.py # 性能测试
# 数据管理
python examples/load_sample_data.py # 加载示例数据
python examples/cleanup_sample_data.py # 清理示例数据
# Phase 2 示例(开发中)
python examples/hybrid_routing.py # 智能路由
python examples/dual_write.py # 双写机制
自定义示例¶
创建自己的示例¶
- 在
examples/目录下创建新文件 - 遵循命名规范:
feature_example.py - 添加清晰的注释和文档
- 包含错误处理
- 保持代码简洁
示例模板¶
"""
示例: 功能描述
此示例演示...
"""
from sqlalchemy import create_engine, text
def main():
"""主函数"""
# 连接
engine = create_engine('couchdb://localhost:5984/examples')
with engine.connect() as conn:
try:
# 操作
conn.execute(text("..."))
conn.commit()
print("✅ 成功")
except Exception as e:
conn.rollback()
print(f"❌ 错误: {e}")
if __name__ == '__main__':
main()
贡献示例¶
欢迎提交示例!
提交流程¶
- Fork 项目
- 创建示例文件
- 运行测试确保示例工作
- 提交 Pull Request
示例要求¶
- 代码清晰可读
- 包含详细注释
- 有错误处理
- 遵循项目代码规范
- 在文档中引用