# datamanager_hjy
[](https://github.com/hjy/datamanager_hjy/actions)
[](https://python.org)
[](https://opensource.org/licenses/MIT)
[](https://pypi.org/project/datamanager-hjy/)
[](https://github.com/hjy/datamanager_hjy)
> **一句话宣言**: 通用的数据管理脚手架,支持多数据库、配置驱动、高性能,让数据操作变得毫不费力。
## 🎯 优雅的"Hello, World"
```python
from datamanager_hjy import DataManager
# 三行代码,启动数据管理
dm = DataManager()
result = dm.create('users', {'name': '张三', 'email': 'zhangsan@example.com'})
users = dm.query('users').filter(name='张三').all()
print(f"🎉 数据操作完成: {users}")
```
## ✨ 为什么选择 datamanager_hjy?
### 🚀 零摩擦体验
- **一键安装**: `pip install datamanager-hjy`
- **零配置启动**: 自动检测环境,智能配置
- **所见即所得**: README中的示例代码可直接运行
### 🎨 苹果产品级设计
- **高内聚低耦合**: 内部复杂,接口简洁
- **类型安全**: 完整的类型提示,IDE友好
- **优雅错误处理**: 人类可读的错误信息
### 🌟 云原生公民
- **配置即插即用**: 外置配置,依赖注入
- **生命周期管理**: 完整的启动、运行、关闭控制
- **健康检查**: 实时监控,自动恢复
### 🔄 多数据库支持
- **统一接口**: 一套API操作多种数据库
- **连接池管理**: 智能连接池,支持动态扩缩容
- **读写分离**: 支持主从数据库配置
- **故障转移**: 自动故障检测和切换
## 🚀 快速开始
### 安装
```bash
pip install datamanager-hjy
```
### 快速开始
```bash
# 运行快速开始示例(无需配置数据库)
python examples/quick_start.py
# 或者使用CLI工具
datamanager --demo
```
### 基本使用
```python
from datamanager_hjy import DataManager
# 创建数据管理器
dm = DataManager()
# 创建数据
user = dm.create('users', {
'name': '李四',
'email': 'lisi@example.com',
'age': 25
})
# 查询数据
users = dm.query('users').filter(age__gte=20).all()
# 更新数据
dm.update('users', {'age': 26}, {'id': user['id']})
# 删除数据
dm.delete('users', {'id': user['id']})
```
### 高级功能
```python
# 批量操作
users_data = [
{'name': '王五', 'email': 'wangwu@example.com'},
{'name': '赵六', 'email': 'zhaoliu@example.com'}
]
dm.batch_create('users', users_data)
# 事务操作
with dm.transaction() as txn:
txn.create('users', user_data)
txn.update('profiles', profile_data, condition)
txn.commit()
# 跨数据库事务
with dm.multi_database_transaction(['default', 'analytics']) as txn:
txn.create('users', user_data, database='default')
txn.create('analytics_data', analytics_data, database='analytics')
# 配置管理
config = dm.get_config('database.default')
dm.update_config('database.default', new_config)
dm.reload_config()
```
### 配置即插即用
```yaml
# config.yaml
databases:
default:
type: mysql
host: ${DB_HOST}
port: ${DB_PORT}
database: ${DB_NAME}
username: ${DB_USER}
password: ${DB_PASSWORD}
pool_size: 10
max_overflow: 20
read_replica:
type: mysql
host: ${DB_READ_HOST}
port: ${DB_READ_PORT}
database: ${DB_READ_NAME}
username: ${DB_READ_USER}
password: ${DB_READ_PASSWORD}
pool_size: 5
max_overflow: 10
models:
auto_discover: true
base_path: models
cache_enabled: true
cache_ttl: 3600
monitoring:
enabled: true
metrics_collection: true
slow_query_threshold: 1000
connection_monitoring: true
```
## 📊 性能指标
- **连接建立时间**: < 100ms
- **查询响应时间**: < 50ms (简单查询)
- **批量操作**: 1000条记录 < 1秒
- **连接池效率**: 连接复用率 > 90%
- **内存使用**: 连接池内存 < 100MB
- **并发支持**: 1000+ 并发连接
- **多数据库**: MySQL、PostgreSQL、SQLite
## 🎯 支持的功能
### 数据库支持
- **MySQL**: 完整支持,包括连接池、读写分离
- **PostgreSQL**: 完整支持,包括JSON字段、数组类型
- **SQLite**: 本地开发支持,轻量级应用
### 核心功能
- **CRUD操作**: 完整的增删改查接口
- **批量操作**: 高效的批量插入、更新、删除
- **事务管理**: 自动事务管理和回滚
- **查询优化**: 智能查询优化和索引建议
- **连接池**: 智能连接池,支持动态扩缩容
- **读写分离**: 支持主从数据库配置
- **故障转移**: 自动故障检测和切换
### 高级功能
- **配置管理**: 配置存储在数据库,支持热更新
- **模型管理**: 自动发现和注册数据模型
- **监控系统**: 性能监控、慢查询检测
- **缓存集成**: 与Redis缓存系统集成
- **日志系统**: 完整的操作日志和错误日志
## 🔧 扩展功能
### 自定义适配器
```python
from datamanager_hjy.adapters.base import BaseAdapter
class CustomAdapter(BaseAdapter):
def connect(self):
# 自定义连接逻辑
pass
def execute(self, query, params=None):
# 自定义执行逻辑
pass
```
### 自定义模型
```python
from datamanager_hjy.models.base import BaseModel
class UserModel(BaseModel):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
email = Column(String(255), unique=True)
def validate_email(self, email):
# 自定义验证逻辑
return '@' in email
```
## 📚 文档
- **[API文档](https://datamanager-hjy.readthedocs.io/)**: 完整的API参考
- **[开发者指南](DEVELOPER.md)**: 架构设计和开发指南
- **[示例代码](examples/)**: 丰富的使用示例
- **[最佳实践](docs/best_practices.md)**: 生产环境部署指南
## 🧪 测试
```bash
# 运行所有测试
pytest
# 运行单元测试
pytest tests/unit/
# 运行集成测试
pytest tests/integration/
# 运行性能测试
pytest tests/performance/ -m "slow"
# 生成覆盖率报告
pytest --cov=datamanager_hjy tests/
```
## 📈 监控
### 性能指标
- **连接池状态**: 连接数量、使用率、等待时间
- **查询性能**: 查询时间、慢查询数量
- **错误率**: 连接错误、查询错误
- **资源使用**: CPU、内存、磁盘使用
### 监控接口
```python
# 获取性能指标
metrics = dm.get_metrics()
# 获取连接状态
status = dm.get_connection_status()
# 获取慢查询
slow_queries = dm.get_slow_queries()
```
## 🤝 贡献
我们欢迎所有形式的贡献!
### 贡献方式
- **报告Bug**: [GitHub Issues](https://github.com/hjy/datamanager_hjy/issues)
- **功能请求**: [GitHub Discussions](https://github.com/hjy/datamanager_hjy/discussions)
- **代码贡献**: Fork项目并提交Pull Request
- **文档改进**: 帮助改进文档和示例
### 开发环境
```bash
# 克隆项目
git clone https://github.com/hjy/datamanager_hjy.git
cd datamanager_hjy
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytest
# 代码格式化
black datamanager_hjy/
isort datamanager_hjy/
# 类型检查
mypy datamanager_hjy/
```
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🆘 支持
- **文档**: [https://datamanager-hjy.readthedocs.io/](https://datamanager-hjy.readthedocs.io/)
- **Issues**: [GitHub Issues](https://github.com/hjy/datamanager_hjy/issues)
- **讨论**: [GitHub Discussions](https://github.com/hjy/datamanager_hjy/discussions)
- **邮件**: hjy@example.com
---
**datamanager_hjy** - 让数据操作变得毫不费力 ✨
Raw data
{
"_id": null,
"home_page": null,
"name": "datamanager-hjy",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "hjy <hjy@example.com>",
"keywords": "database, orm, sqlalchemy, mysql, postgresql, sqlite, data-management",
"author": null,
"author_email": "hjy <hjy@example.com>",
"download_url": "https://files.pythonhosted.org/packages/03/54/d61f10977fb9cc66045d23cfaf3de57cd85133c966838170d3b24a52cae0/datamanager_hjy-0.0.1.tar.gz",
"platform": null,
"description": "# datamanager_hjy\n\n[](https://github.com/hjy/datamanager_hjy/actions)\n[](https://python.org)\n[](https://opensource.org/licenses/MIT)\n[](https://pypi.org/project/datamanager-hjy/)\n[](https://github.com/hjy/datamanager_hjy)\n\n> **\u4e00\u53e5\u8bdd\u5ba3\u8a00**: \u901a\u7528\u7684\u6570\u636e\u7ba1\u7406\u811a\u624b\u67b6\uff0c\u652f\u6301\u591a\u6570\u636e\u5e93\u3001\u914d\u7f6e\u9a71\u52a8\u3001\u9ad8\u6027\u80fd\uff0c\u8ba9\u6570\u636e\u64cd\u4f5c\u53d8\u5f97\u6beb\u4e0d\u8d39\u529b\u3002\n\n## \ud83c\udfaf \u4f18\u96c5\u7684\"Hello, World\"\n\n```python\nfrom datamanager_hjy import DataManager\n\n# \u4e09\u884c\u4ee3\u7801\uff0c\u542f\u52a8\u6570\u636e\u7ba1\u7406\ndm = DataManager()\nresult = dm.create('users', {'name': '\u5f20\u4e09', 'email': 'zhangsan@example.com'})\nusers = dm.query('users').filter(name='\u5f20\u4e09').all()\n\nprint(f\"\ud83c\udf89 \u6570\u636e\u64cd\u4f5c\u5b8c\u6210: {users}\")\n```\n\n## \u2728 \u4e3a\u4ec0\u4e48\u9009\u62e9 datamanager_hjy\uff1f\n\n### \ud83d\ude80 \u96f6\u6469\u64e6\u4f53\u9a8c\n- **\u4e00\u952e\u5b89\u88c5**: `pip install datamanager-hjy`\n- **\u96f6\u914d\u7f6e\u542f\u52a8**: \u81ea\u52a8\u68c0\u6d4b\u73af\u5883\uff0c\u667a\u80fd\u914d\u7f6e\n- **\u6240\u89c1\u5373\u6240\u5f97**: README\u4e2d\u7684\u793a\u4f8b\u4ee3\u7801\u53ef\u76f4\u63a5\u8fd0\u884c\n\n### \ud83c\udfa8 \u82f9\u679c\u4ea7\u54c1\u7ea7\u8bbe\u8ba1\n- **\u9ad8\u5185\u805a\u4f4e\u8026\u5408**: \u5185\u90e8\u590d\u6742\uff0c\u63a5\u53e3\u7b80\u6d01\n- **\u7c7b\u578b\u5b89\u5168**: \u5b8c\u6574\u7684\u7c7b\u578b\u63d0\u793a\uff0cIDE\u53cb\u597d\n- **\u4f18\u96c5\u9519\u8bef\u5904\u7406**: \u4eba\u7c7b\u53ef\u8bfb\u7684\u9519\u8bef\u4fe1\u606f\n\n### \ud83c\udf1f \u4e91\u539f\u751f\u516c\u6c11\n- **\u914d\u7f6e\u5373\u63d2\u5373\u7528**: \u5916\u7f6e\u914d\u7f6e\uff0c\u4f9d\u8d56\u6ce8\u5165\n- **\u751f\u547d\u5468\u671f\u7ba1\u7406**: \u5b8c\u6574\u7684\u542f\u52a8\u3001\u8fd0\u884c\u3001\u5173\u95ed\u63a7\u5236\n- **\u5065\u5eb7\u68c0\u67e5**: \u5b9e\u65f6\u76d1\u63a7\uff0c\u81ea\u52a8\u6062\u590d\n\n### \ud83d\udd04 \u591a\u6570\u636e\u5e93\u652f\u6301\n- **\u7edf\u4e00\u63a5\u53e3**: \u4e00\u5957API\u64cd\u4f5c\u591a\u79cd\u6570\u636e\u5e93\n- **\u8fde\u63a5\u6c60\u7ba1\u7406**: \u667a\u80fd\u8fde\u63a5\u6c60\uff0c\u652f\u6301\u52a8\u6001\u6269\u7f29\u5bb9\n- **\u8bfb\u5199\u5206\u79bb**: \u652f\u6301\u4e3b\u4ece\u6570\u636e\u5e93\u914d\u7f6e\n- **\u6545\u969c\u8f6c\u79fb**: \u81ea\u52a8\u6545\u969c\u68c0\u6d4b\u548c\u5207\u6362\n\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\n\n### \u5b89\u88c5\n\n```bash\npip install datamanager-hjy\n```\n\n### \u5feb\u901f\u5f00\u59cb\n\n```bash\n# \u8fd0\u884c\u5feb\u901f\u5f00\u59cb\u793a\u4f8b\uff08\u65e0\u9700\u914d\u7f6e\u6570\u636e\u5e93\uff09\npython examples/quick_start.py\n\n# \u6216\u8005\u4f7f\u7528CLI\u5de5\u5177\ndatamanager --demo\n```\n\n### \u57fa\u672c\u4f7f\u7528\n\n```python\nfrom datamanager_hjy import DataManager\n\n# \u521b\u5efa\u6570\u636e\u7ba1\u7406\u5668\ndm = DataManager()\n\n# \u521b\u5efa\u6570\u636e\nuser = dm.create('users', {\n 'name': '\u674e\u56db',\n 'email': 'lisi@example.com',\n 'age': 25\n})\n\n# \u67e5\u8be2\u6570\u636e\nusers = dm.query('users').filter(age__gte=20).all()\n\n# \u66f4\u65b0\u6570\u636e\ndm.update('users', {'age': 26}, {'id': user['id']})\n\n# \u5220\u9664\u6570\u636e\ndm.delete('users', {'id': user['id']})\n```\n\n### \u9ad8\u7ea7\u529f\u80fd\n\n```python\n# \u6279\u91cf\u64cd\u4f5c\nusers_data = [\n {'name': '\u738b\u4e94', 'email': 'wangwu@example.com'},\n {'name': '\u8d75\u516d', 'email': 'zhaoliu@example.com'}\n]\ndm.batch_create('users', users_data)\n\n# \u4e8b\u52a1\u64cd\u4f5c\nwith dm.transaction() as txn:\n txn.create('users', user_data)\n txn.update('profiles', profile_data, condition)\n txn.commit()\n\n# \u8de8\u6570\u636e\u5e93\u4e8b\u52a1\nwith dm.multi_database_transaction(['default', 'analytics']) as txn:\n txn.create('users', user_data, database='default')\n txn.create('analytics_data', analytics_data, database='analytics')\n\n# \u914d\u7f6e\u7ba1\u7406\nconfig = dm.get_config('database.default')\ndm.update_config('database.default', new_config)\ndm.reload_config()\n```\n\n### \u914d\u7f6e\u5373\u63d2\u5373\u7528\n\n```yaml\n# config.yaml\ndatabases:\n default:\n type: mysql\n host: ${DB_HOST}\n port: ${DB_PORT}\n database: ${DB_NAME}\n username: ${DB_USER}\n password: ${DB_PASSWORD}\n pool_size: 10\n max_overflow: 20\n \n read_replica:\n type: mysql\n host: ${DB_READ_HOST}\n port: ${DB_READ_PORT}\n database: ${DB_READ_NAME}\n username: ${DB_READ_USER}\n password: ${DB_READ_PASSWORD}\n pool_size: 5\n max_overflow: 10\n\nmodels:\n auto_discover: true\n base_path: models\n cache_enabled: true\n cache_ttl: 3600\n\nmonitoring:\n enabled: true\n metrics_collection: true\n slow_query_threshold: 1000\n connection_monitoring: true\n```\n\n## \ud83d\udcca \u6027\u80fd\u6307\u6807\n\n- **\u8fde\u63a5\u5efa\u7acb\u65f6\u95f4**: < 100ms\n- **\u67e5\u8be2\u54cd\u5e94\u65f6\u95f4**: < 50ms (\u7b80\u5355\u67e5\u8be2)\n- **\u6279\u91cf\u64cd\u4f5c**: 1000\u6761\u8bb0\u5f55 < 1\u79d2\n- **\u8fde\u63a5\u6c60\u6548\u7387**: \u8fde\u63a5\u590d\u7528\u7387 > 90%\n- **\u5185\u5b58\u4f7f\u7528**: \u8fde\u63a5\u6c60\u5185\u5b58 < 100MB\n- **\u5e76\u53d1\u652f\u6301**: 1000+ \u5e76\u53d1\u8fde\u63a5\n- **\u591a\u6570\u636e\u5e93**: MySQL\u3001PostgreSQL\u3001SQLite\n\n## \ud83c\udfaf \u652f\u6301\u7684\u529f\u80fd\n\n### \u6570\u636e\u5e93\u652f\u6301\n- **MySQL**: \u5b8c\u6574\u652f\u6301\uff0c\u5305\u62ec\u8fde\u63a5\u6c60\u3001\u8bfb\u5199\u5206\u79bb\n- **PostgreSQL**: \u5b8c\u6574\u652f\u6301\uff0c\u5305\u62ecJSON\u5b57\u6bb5\u3001\u6570\u7ec4\u7c7b\u578b\n- **SQLite**: \u672c\u5730\u5f00\u53d1\u652f\u6301\uff0c\u8f7b\u91cf\u7ea7\u5e94\u7528\n\n### \u6838\u5fc3\u529f\u80fd\n- **CRUD\u64cd\u4f5c**: \u5b8c\u6574\u7684\u589e\u5220\u6539\u67e5\u63a5\u53e3\n- **\u6279\u91cf\u64cd\u4f5c**: \u9ad8\u6548\u7684\u6279\u91cf\u63d2\u5165\u3001\u66f4\u65b0\u3001\u5220\u9664\n- **\u4e8b\u52a1\u7ba1\u7406**: \u81ea\u52a8\u4e8b\u52a1\u7ba1\u7406\u548c\u56de\u6eda\n- **\u67e5\u8be2\u4f18\u5316**: \u667a\u80fd\u67e5\u8be2\u4f18\u5316\u548c\u7d22\u5f15\u5efa\u8bae\n- **\u8fde\u63a5\u6c60**: \u667a\u80fd\u8fde\u63a5\u6c60\uff0c\u652f\u6301\u52a8\u6001\u6269\u7f29\u5bb9\n- **\u8bfb\u5199\u5206\u79bb**: \u652f\u6301\u4e3b\u4ece\u6570\u636e\u5e93\u914d\u7f6e\n- **\u6545\u969c\u8f6c\u79fb**: \u81ea\u52a8\u6545\u969c\u68c0\u6d4b\u548c\u5207\u6362\n\n### \u9ad8\u7ea7\u529f\u80fd\n- **\u914d\u7f6e\u7ba1\u7406**: \u914d\u7f6e\u5b58\u50a8\u5728\u6570\u636e\u5e93\uff0c\u652f\u6301\u70ed\u66f4\u65b0\n- **\u6a21\u578b\u7ba1\u7406**: \u81ea\u52a8\u53d1\u73b0\u548c\u6ce8\u518c\u6570\u636e\u6a21\u578b\n- **\u76d1\u63a7\u7cfb\u7edf**: \u6027\u80fd\u76d1\u63a7\u3001\u6162\u67e5\u8be2\u68c0\u6d4b\n- **\u7f13\u5b58\u96c6\u6210**: \u4e0eRedis\u7f13\u5b58\u7cfb\u7edf\u96c6\u6210\n- **\u65e5\u5fd7\u7cfb\u7edf**: \u5b8c\u6574\u7684\u64cd\u4f5c\u65e5\u5fd7\u548c\u9519\u8bef\u65e5\u5fd7\n\n## \ud83d\udd27 \u6269\u5c55\u529f\u80fd\n\n### \u81ea\u5b9a\u4e49\u9002\u914d\u5668\n```python\nfrom datamanager_hjy.adapters.base import BaseAdapter\n\nclass CustomAdapter(BaseAdapter):\n def connect(self):\n # \u81ea\u5b9a\u4e49\u8fde\u63a5\u903b\u8f91\n pass\n \n def execute(self, query, params=None):\n # \u81ea\u5b9a\u4e49\u6267\u884c\u903b\u8f91\n pass\n```\n\n### \u81ea\u5b9a\u4e49\u6a21\u578b\n```python\nfrom datamanager_hjy.models.base import BaseModel\n\nclass UserModel(BaseModel):\n __tablename__ = 'users'\n \n id = Column(Integer, primary_key=True)\n name = Column(String(100), nullable=False)\n email = Column(String(255), unique=True)\n \n def validate_email(self, email):\n # \u81ea\u5b9a\u4e49\u9a8c\u8bc1\u903b\u8f91\n return '@' in email\n```\n\n## \ud83d\udcda \u6587\u6863\n\n- **[API\u6587\u6863](https://datamanager-hjy.readthedocs.io/)**: \u5b8c\u6574\u7684API\u53c2\u8003\n- **[\u5f00\u53d1\u8005\u6307\u5357](DEVELOPER.md)**: \u67b6\u6784\u8bbe\u8ba1\u548c\u5f00\u53d1\u6307\u5357\n- **[\u793a\u4f8b\u4ee3\u7801](examples/)**: \u4e30\u5bcc\u7684\u4f7f\u7528\u793a\u4f8b\n- **[\u6700\u4f73\u5b9e\u8df5](docs/best_practices.md)**: \u751f\u4ea7\u73af\u5883\u90e8\u7f72\u6307\u5357\n\n## \ud83e\uddea \u6d4b\u8bd5\n\n```bash\n# \u8fd0\u884c\u6240\u6709\u6d4b\u8bd5\npytest\n\n# \u8fd0\u884c\u5355\u5143\u6d4b\u8bd5\npytest tests/unit/\n\n# \u8fd0\u884c\u96c6\u6210\u6d4b\u8bd5\npytest tests/integration/\n\n# \u8fd0\u884c\u6027\u80fd\u6d4b\u8bd5\npytest tests/performance/ -m \"slow\"\n\n# \u751f\u6210\u8986\u76d6\u7387\u62a5\u544a\npytest --cov=datamanager_hjy tests/\n```\n\n## \ud83d\udcc8 \u76d1\u63a7\n\n### \u6027\u80fd\u6307\u6807\n- **\u8fde\u63a5\u6c60\u72b6\u6001**: \u8fde\u63a5\u6570\u91cf\u3001\u4f7f\u7528\u7387\u3001\u7b49\u5f85\u65f6\u95f4\n- **\u67e5\u8be2\u6027\u80fd**: \u67e5\u8be2\u65f6\u95f4\u3001\u6162\u67e5\u8be2\u6570\u91cf\n- **\u9519\u8bef\u7387**: \u8fde\u63a5\u9519\u8bef\u3001\u67e5\u8be2\u9519\u8bef\n- **\u8d44\u6e90\u4f7f\u7528**: CPU\u3001\u5185\u5b58\u3001\u78c1\u76d8\u4f7f\u7528\n\n### \u76d1\u63a7\u63a5\u53e3\n```python\n# \u83b7\u53d6\u6027\u80fd\u6307\u6807\nmetrics = dm.get_metrics()\n\n# \u83b7\u53d6\u8fde\u63a5\u72b6\u6001\nstatus = dm.get_connection_status()\n\n# \u83b7\u53d6\u6162\u67e5\u8be2\nslow_queries = dm.get_slow_queries()\n```\n\n## \ud83e\udd1d \u8d21\u732e\n\n\u6211\u4eec\u6b22\u8fce\u6240\u6709\u5f62\u5f0f\u7684\u8d21\u732e\uff01\n\n### \u8d21\u732e\u65b9\u5f0f\n- **\u62a5\u544aBug**: [GitHub Issues](https://github.com/hjy/datamanager_hjy/issues)\n- **\u529f\u80fd\u8bf7\u6c42**: [GitHub Discussions](https://github.com/hjy/datamanager_hjy/discussions)\n- **\u4ee3\u7801\u8d21\u732e**: Fork\u9879\u76ee\u5e76\u63d0\u4ea4Pull Request\n- **\u6587\u6863\u6539\u8fdb**: \u5e2e\u52a9\u6539\u8fdb\u6587\u6863\u548c\u793a\u4f8b\n\n### \u5f00\u53d1\u73af\u5883\n```bash\n# \u514b\u9686\u9879\u76ee\ngit clone https://github.com/hjy/datamanager_hjy.git\ncd datamanager_hjy\n\n# \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\npip install -e \".[dev]\"\n\n# \u8fd0\u884c\u6d4b\u8bd5\npytest\n\n# \u4ee3\u7801\u683c\u5f0f\u5316\nblack datamanager_hjy/\nisort datamanager_hjy/\n\n# \u7c7b\u578b\u68c0\u67e5\nmypy datamanager_hjy/\n```\n\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1 - \u67e5\u770b [LICENSE](LICENSE) \u6587\u4ef6\u4e86\u89e3\u8be6\u60c5\u3002\n\n## \ud83c\udd98 \u652f\u6301\n\n- **\u6587\u6863**: [https://datamanager-hjy.readthedocs.io/](https://datamanager-hjy.readthedocs.io/)\n- **Issues**: [GitHub Issues](https://github.com/hjy/datamanager_hjy/issues)\n- **\u8ba8\u8bba**: [GitHub Discussions](https://github.com/hjy/datamanager_hjy/discussions)\n- **\u90ae\u4ef6**: hjy@example.com\n\n---\n\n**datamanager_hjy** - \u8ba9\u6570\u636e\u64cd\u4f5c\u53d8\u5f97\u6beb\u4e0d\u8d39\u529b \u2728\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "\u901a\u7528\u7684\u6570\u636e\u7ba1\u7406\u811a\u624b\u67b6\uff0c\u652f\u6301\u591a\u6570\u636e\u5e93\u3001\u914d\u7f6e\u9a71\u52a8\u3001\u9ad8\u6027\u80fd",
"version": "0.0.1",
"project_urls": {
"Bug Tracker": "https://github.com/hjy/datamanager_hjy/issues",
"Documentation": "https://datamanager-hjy.readthedocs.io/",
"Download": "https://pypi.org/project/datamanager-hjy/#files",
"Homepage": "https://github.com/hjy/datamanager-hjy",
"Repository": "https://github.com/hjy/datamanager-hjy.git",
"Source Code": "https://github.com/hjy/datamanager_hjy"
},
"split_keywords": [
"database",
" orm",
" sqlalchemy",
" mysql",
" postgresql",
" sqlite",
" data-management"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "9d6731096e2e2f24e4af4870f6d6b40af53be28893cba4cab81d4b84f9a8993c",
"md5": "50f4b952874f5f80ff84d41c8f340520",
"sha256": "3a4c81502d8018a102dfc440009f70011f0fdf4a84c614c70669be4e1bc687b4"
},
"downloads": -1,
"filename": "datamanager_hjy-0.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "50f4b952874f5f80ff84d41c8f340520",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 51950,
"upload_time": "2025-08-16T23:51:48",
"upload_time_iso_8601": "2025-08-16T23:51:48.549710Z",
"url": "https://files.pythonhosted.org/packages/9d/67/31096e2e2f24e4af4870f6d6b40af53be28893cba4cab81d4b84f9a8993c/datamanager_hjy-0.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0354d61f10977fb9cc66045d23cfaf3de57cd85133c966838170d3b24a52cae0",
"md5": "adf20ada4dc381c2f024aeff076db2c3",
"sha256": "ada66529cd2252ca9dbf850a24e8b152ca4d8b3c97326828ba76a1cee226cab3"
},
"downloads": -1,
"filename": "datamanager_hjy-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "adf20ada4dc381c2f024aeff076db2c3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 43554,
"upload_time": "2025-08-16T23:51:50",
"upload_time_iso_8601": "2025-08-16T23:51:50.415974Z",
"url": "https://files.pythonhosted.org/packages/03/54/d61f10977fb9cc66045d23cfaf3de57cd85133c966838170d3b24a52cae0/datamanager_hjy-0.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-16 23:51:50",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hjy",
"github_project": "datamanager_hjy",
"github_not_found": true,
"lcname": "datamanager-hjy"
}