# sqlalchemy-tool **Repository Path**: code-thinker/sqlalchemy-tool ## Basic Information - **Project Name**: sqlalchemy-tool - **Description**: Sqlalchemy操作工具,本工具封装了使用Sqlalchemy进行数据库的常见操作,如:插入、批量插入、保存(如果条件查询的存在,则更新;如果不存在,则添加)、批量保存(如果id查询的存在,则更新;如果不存在,则添加)、修改(可根据条件修改) 批量修改(根据id修改)、查询单条(通过条件查询)、查询单条数据组成dict(通过条件查询)、通过id查询单条、查询所有(通过条件查询)、通过id列表查 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2023-01-12 - **Last Updated**: 2025-02-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: sqlalchemy ## README # sqlalchemy-tool ## 介绍 Sqlalchemy是Python中常见的ORM操作工具,本项目封装了Sqlalchemy的部分操作,完成了常见的数据库操作,已经实现的接口有: - 插入 - 批量插入 - 保存(如果条件查询的存在,则更新;如果不存在,则添加) - 批量保存(如果id查询的存在,则更新;如果不存在,则添加) - 修改(可根据条件修改) - 批量修改(根据id修改) - 查询单条(通过条件查询) - 查询单条数据组成dict(通过条件查询) - 通过id查询单条 - 查询所有(通过条件查询) - 通过id列表查询 - 分页查询(通过条件查询) - 查询条数(通过条件查询) - 删除(通过条件删除) - 通过id列表删除 - ## 项目结构 项目结构说明 sqlalchemy_tool下存放了自定义个工具类: - meta_class.py:文件中定义了`ModelMetaClass`类,该类是一个元类,现有以下功能: - 给Model实例添加`__column_dict__`字段, 该字段存储了字段名和字段Column类型的字典集; - 校验Model类定义时,类名是否首字母大写,是否有文档注释,如果没有,会抛出异常,创建Model实例失败; - model.py: 文件中自定义了一个继承了Sqlalchemy的`Base`的`Model`类,用户使用时,可以继承该`Model`类,代替使用继承`Base`; - `Model`类中定义了实例`objects`属性,该实例属性可以实现类似django的数据操作时的管理器功能 - `Model`类中定义了类方法`objects_()`,该类方法可以实现类似django的数据操作时的管理器功能 - transcation_decorator.py: 文件中定义一个`Transcation`类,该类用于作为事务注解使用,可以实现自动提交、异常自动回滚; - model_utils.py:文件中定义了定义了`Model`实例转字典、`Model`实例列表转字典列表、`Model`实例转Json字符串、`Model`实例列表转Json字符串; - manager.py:文件中定义了一个`Manager`类,该类主要用于数据库操作,增、删、改、查等功能的接口都是在这个类中定义的,使用`Model`实例的实例`objects`属性或类方法`objects_()`都是获取该`Manager`的实例,有类该实例,`Model`类可以直接操作数据库; - base_crdu.py:文件中定义了一个`BaseCrdu`类,该类主要是调用`Manager`类进行数据操作,基本上是完全封装了`Manager`类的接口 - config.py:该类是一个配置类,现有的只有一个配置项`Base`,主要用于导入Sqlalchemy的`Base` - ## 安装教程 现在项目还没有部署到pypi平台,如果要在项目中使用,可以按照如下流程: 1. 执行命令`pip install -r requirements.txt` ,可以导入需要的库SQLAlchemy和PyMySQL; 2. 拷贝sqlalchemy_tool目录下到你的项目中; 3. 修改sqlalchemy_tool目录下config.py文件中配置项`Base`的导入; ## 使用说明 1. 拷贝sqlalchemy_tool目录下到你的项目中 2. 修改sqlalchemy_tool目录下config.py文件中配置项`Base`的导入,如这里导入的是example/database.py中配置的`Base` 3. 编写基础自`Model`类的model类,基本用法和Sqlalchemy的定义一样,只是改继承`Base`为继承`Model`类, 可以参考example/models.py中的示例 4. 如果要自定义数据操作接口,可以创建继承自`BaseCrdu`的类,可以参考example/crdu.py中的示例 5. 具体操作接口的使用,可以参考test/test_crdu.py和test/test_manager.py文件中的测试示例 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)