欢迎

Aestate —— 多样化数据库查询

star star star

qq 群:909044439 (Aestate Framework) (opens new window)
开源示例项目:gitee/aestate-example (opens new window)(旧版本)

# 介绍

当前测试通过数据库有(通过测试并不表示已经适配,内置字段除 mysql 以外任然需要自主编写):

  • MySql8.0
  • Sqlserver2019
  • PostgreSQL 13.3

Aestate Framework 是一款基于Python语言开发的ORM框架, 你可以使用多种方式去实现基于对象方式的查询.

也就是相对于 Java 语言的 Mybatis-Plus

比如使用类似Django的模式去使用:modelClass.orm.filter(*args, **kwargs)

或者 SQLAlchemy 的方式:find().where(**kwargs).group_by(*args)

或者像JavaHibernate一样:

@SelectAbst()
def find_all_F_where_id_in_and_name_like_order_by_id(self, **kwargs) -> list: ...


@Select("SELECT * FROM demo WHERE id=#{id} AND name=#{name}")
def find_all_where_id(self, id, name): ...
1
2
3
4
5
6

或者像JavaMybatis使用 xml

<?xml version="1.0"?>
<aestate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="aestate  https://gitee.com/aecode/aestate-xml/blob/main/v1/tags.xsd"
         xmlns="aestate">
    <template id="templateField">
        id,name,password,create_time,update_time
        <description>测试模板</description>
    </template>
    <resultMap id="resultMapLeftJoin" type="testOpera.operas.table.demoModels.Demo">
        <result column="d1_id" properties="id"/>
        <result column="d1_name" properties="name"/>
        <result column="d1_password" properties="password"/>
        <foreign ref="demoJoin" single="false">
        </foreign>
    </resultMap>
    <select id="findAllById" resultMap="resultMapLeftJoin">
        SELECT
        <!-- 导入查询的字段 -->
        <!--            <include from="templateField"/>-->
        <include from="tempSymbol"/>
        FROM demo as d1 LEFT JOIN demo as d2 ON d2.id = d1.id WHERE d1.id >
        <switch field="id">
            <case value="10">10</case>
            <case value="5">5</case>
            <default>#{id}</default>
        </switch>
        <if test="#{id}&gt;=20">AND d2.id > 20</if>
        <else>AND d2.id > 10</else>
        LIMIT 2
    </select>
    <!-- insert在最顶上,因为普遍代码量少 -->
    <insert id="insertTest" last="False">
        INSERT INTO `demo`.`demo` (`name`, `password`) VALUES (#{name}, #{password})
    </insert>
    <!-- update在中间,改动最频繁 -->
    <update id="updateTest" last="False">
        UPDATE `demo`.`demo` SET `name` = #{name}, `password` = #{password} WHERE `id` = ${id}
    </update>
    <!-- 删除在最底下,容易找到且代码普遍简单 -->
    <delete id="deleteTest">
        DELETE FROM `demo`.`demo` WHERE `id` = #{id}
        <description>
            删除指定id
        </description>
    </delete>
</aestate>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 相对于其他库有什么区别?

  • 首先Aestate是基于 Django、SQLAlchemy、Mybatis、Mybatis-Plus、SpringJPA 整合起来的一个数据库支持库, 融合了这么多第三方库首先一点就是他的操作方式是多种多样的。目前已有六种操作方法, 也就是 Django 模式、SQLAlchemy 模式、xml 模式、Mybatis-Plus 模式,注解模式,原生模式。

  • 其次就是在兼容性方面,由于这个世界上的数据库种类太多了没办法做到统一, Aestate保留了对其他小众数据库的实现接口,尽可能多兼容数据库。

  • 数据库表方面,Django 是会生成数据 django 自己系统内部的表,在迁移的时候呢如果做错一步可能对于新手 来讲后面的修复操作是极其难的,也未必能够在短时间内定位问题并修复。Aestate为了解决这个问题,将 make 和手动建表尽可能的兼容,不会生成额外的表和数据,也不会捆绑某个特定系统,将 pojo/model 复制出来可以直接为下一个项目使用。

  • 缓存方面参考了 Mybatis 的实现方法并略微修改,Aestate有两个内存管理模块,用于保证数据的完整性, 当一些特别大的数据占满缓存时,Aestate 会尽量多的去分配内存保证数据完整性,除外才会去管理内存(不建议操作大于系统内存 2/10 的数据)。Aestate 有弹性内存管理方式,会根据系统的执行自动调整缓存大小,尽可能的加快运行速度,减少对数据库的连接次数。(最新 1.0.9 已删除缓存策略)

  • 自带日志和美化,不需要下载其他插件就可以把日志变色,自动保存日志,这个功能对于爱美的大兄弟简直就 是神仙般的存在(当然也可能只有我喜欢装逼)

  • 还有很多......

windows 控制台日志乱码解决办法:下载 ansicon (opens new window) ,执行命令:

ansicon -i
ansicon -l
1
2

# 关于教程和文档地址

文档已经迁移到免费托管平台:http://aestate.angid.eu.org,文档将会逐步在gitee更新

csdn: AECODE (opens new window)
OSCHINA: CACode (opens new window)
bilibili 大学堂: 你在写臭虫? (opens new window)
官网域名: cacode.ren (opens new window)(迁移到腾讯云没备案)
文档官网域名: doc.cacode.ren (opens new window) >  http://aestate.angid.eu.org (opens new window)
Gitee 官方: https://aecode.gitee.io/aestate-doc (opens new window)
项目体系结构: aecode.gitee.io/aestate (opens new window)

# 先决条件

Python >=3.6 教程文档地址:http://doc.cacode.ren http://aestate.angid.eu.org

# 版本说明

基础需要 2.7 以上的 python 版本,对于只需要执行 sql 可以使用 2.7 以上(不建议)

最优的办法是使用 3.6 以上,可以使用绝大部分功能

由于 1.0.7 增加异步方法,需要异步执行的小伙伴可以使用 python>=3.7.10 以上版本

# 安装

pip install aestate

conda install aestate
1
2
3

# 我是新手,怎么快速入门呢?

你可以前往https://doc.cacode.ren (opens new window)跟着官方文档入门
也可以在 B 站 你在写臭虫 (opens new window) 看视频学 专治疑难杂症,请前往 csdn 查看官方解决方案: Aecode 的 csdn.net (opens new window)

# 操作方式太多了一下子学不会怎么办?

Aestate有五种方式,不是非要全部都会,我当时写的时候只是为了把很多语言的操作方式用 Python 实现,然后让其他语言转 Python 的开发者能够找到熟悉的感觉,例如

  1. Java 专业户:用 xml、方法名和注解
  2. Python 专业户:用 Django 模式和 SQLAlchemy 模式
  3. 纯萌新:老老实实写 SQL,先把基础练好

更多示例项目请前往

👉 Go to canotf`s homepage on Gitee 👈 (opens new window)

# 鸣谢

Cpython
DBPool
Simplejson
Gitee

# 感谢捐献

Spacexzm Canotf Potuo Zxiaosi Xierkz
Last Updated: 5/10/2023, 3:05:26 PM