当前位置: 首页 > news >正文

Python ORM Bee V1.9.0发布,支持多表关联查询,代码量少,AI写也容易检查

用 AI 写代码,但太多代码,检查不过来;那就用 ORM Bee, 代码简单明了,不用写多余代码,轻松 Review!

Pythone ORM Bee 让你使用 Python 开发数据库应用更简单!让你的 AI 开发真正的智能!

Flask + Bee 开发 python web 系统更加快.

几行代码,就能让你完成数据库的查改增删:

suid = Suid() #查询所有记录 orderList = suid.select(Orders()) # select all #插入一条记录 suid.insert(orders) #更新,删除记录 n1 = suid.update(orders) n2 = suid.delete(orders)

还支持 active record 风格编程:

use BaseMode for active record type. e.g. class Orders(BaseMode): #__tablename__ = "orders" id:int = None name:str = None remark:str = None def __repr__(self): return str(self.__dict__) if __name__ == '__main__': orders = Orders() orderList=orders.select()

主要功能

V1.9.0

1.9.0(2026.07)

  1. 多表查询 (一对一关联)
  2. 更新cache以支持多表查询
  3. 主表对象和子表对象的值可转到where
  4. 多表查询支持Condition参数
  5. 多表查询支持分页
  6. 多表查询支持(一对多)
  7. 多表查询支持(多对一)
  8. 多表查询支持分页参数,指定查询字段参数
  9. 创建表支持在实体里有多表关联注解joins

往期回顾:

V1.0 发布

V1.1 发布

V1.3

V1.5.4

V1.6.0

V1.6.2

快速开始:

安装依赖包

在命令行输入以下命令:

pip install ormbee

ORM Beepypi url:
https://pypi.org/project/ormbee/

1. 配置 db 连接信息

1. 配置db连接信息 1.1.can custom your db Module in bee.json or bee.properties set dbModuleName { "dbname": "SQLite", "database": "bee.db", //default support: pymysql,sqlite3,cx_Oracle,psycopg2 (no need set) "dbModuleName":"sqlite3" } #value is: MySql,SQLite,Oracle, #MySQL config #bee.db.dbname=MySQL #bee.db.host =localhost #bee.db.user =root #bee.db.password = #bee.db.database =bee #bee.db.port=3306 # SQLite bee.db.dbname=SQLite bee.db.database =bee.db 1.2.if do not want to use the default config file(bee.json or bee.properties), can set the db_config info yourself. # #mysql dict_config = { 'dbname':'MySQL', 'host': 'localhost', # 数据库主机 'user': 'root', # 替换为您的 MySQL 用户名 'password': '', # 替换为您的 MySQL 密码 'database': 'bee', # 替换为您的数据库名称 'port':3306 } honeyConfig= HoneyConfig() honeyConfig.set_db_config_dict(dict_config)

2. 使用 Bee 操作数据库

2. 使用Bee操作数据库 class Orders: id = None name = None remark = None # can ignore def __repr__(self): return str(self.__dict__) # also can use field type as :int class Orders8: __tablename__ = "orders" id:int = None name:str = None remark:str = None def __repr__(self): return str(self.__dict__) class Student2: id = None name = None age = None remark = None addr = None def __repr__(self): return str(self.__dict__) from bee.api import Suid, SuidRich from bee.config import PreConfig from bee.honeyfactory import BF from bee.osql.bee_enum import Op if __name__ == "__main__": # set bee.properties/bee.json config folder PreConfig.config_path="E:\\Bee-Project\\resources" # select record suid = Suid() orderList = suid.select(Orders()) # select all # insert orders = Orders() orders.id = 1 orders.name = "bee" orders.remark = "test" suid = Suid() suid.insert(orders) # update/delete orders = Orders() orders.name = "bee130" # For safety reasons # Fields that are not present in the entity will be ignored. orders.ext = "aaa" orders.id = 1 suid = Suid() n1 = suid.update(orders) n2 = suid.delete(orders) print(n1) print(n2) # batch insert student0 = Student2() student0.name = "bee" student1 = Student2() student1.name = "bee1" student1.addr = "" student1.age = 40 entity_list = [] entity_list.append(student0) entity_list.append(student1) suidRich = SuidRich() insertNum = suidRich.insert_batch(entity_list) print(insertNum) #how to use Condition for advanced query and update condition = BF.condition() condition.op("age", Op.ge, 22) condition.op("remark", Op.eq, None) stuList = suidRich.select(Student2(), condition) # select ... from student2 where age >= ? and remark is null for stu in stuList: print(stu) # all stu'age add 1 if id>5 condition = BF.condition() condition.setAdd("age", 1) condition.op("id", Op.ge, 5) updateNum = suidRich.updateBy(Student2(), condition) # update student2 set age = age + ? where id >= ? print("updateNum:", updateNum) #SuidRich: insert_batch,select_first,updateBy #复杂的where过滤条件、group,having,order by,Update Set等可使用Condition;

3. 多表关联查询

frombee.bee_enumimportJoinTypefrombee.honeyfactoryimportBFfrombee.annoimportJoinTableimportMyConfig# one to many, layer is 4.# 一对多,4层表classVillage: """ table village 's entity """ id: int = None name: str = None level: int = None remark: str = None town_id: int = Nonedef__repr__(self):returnstr(self.__dict__)classTown: """ table town 's entity """ id: int = None name: str = None level: int = None remark: str = None city_id: int = None village_list = None __joins__ = { "village_list": JoinTable( sub_class = Village, joinType = JoinType.JOIN, main_fields = ["id"], sub_fields = ["town_id"], is_list = True ) }def__repr__(self):returnstr(self.__dict__)classCity: """ table city 's entity """ id: int = None name: str = None level: int = None remark: str = None province_id: int = None town_list = None __joins__ = { "town_list": JoinTable( sub_class = Town, joinType = JoinType.JOIN, main_fields = ["id"], sub_fields = ["city_id"], is_list = True ) }def__repr__(self):returnstr(self.__dict__)classProvince: """ table province 's entity """ id: int = None name: str = None level: int = None remark: str = None city_list = None __joins__ = { "city_list": JoinTable( sub_class = City, joinType = JoinType.JOIN, main_fields = ["id"], sub_fields = ["province_id"], is_list = True ) }def__repr__(self):returnstr(self.__dict__)if__name__ == '__main__': MyConfig.init() province = Province() moreTable = BF.moreTable() mylist = moreTable.select(province)# #查前两条记录# condition = BF.condition()# condtion.start(0)# condtion.size(2)# teaList = moreTable.select(province, condition)# print(len(mylist))ifmylist:foroneinmylist: print(one)

4. 其它功能

主要API在bee.api.py Suid: simple API for Select/Update/Insert/Delete SuidRich : select_paging, insert_batch, updateBy, select_first,select_by_id, delete_by_id,select_fun,count,exist,create_table,index_normal,uniqueMoreTable :Multi table join Select/Update/Insert/DeletePreparedSql: select, select_dict, modify, modify_dict

诚邀您的加入!

如果您还想添加什么功能,请到评论区告诉我们。

项目首页:

  • https://gitee.com/automvc/BeePy/
  • https://github.com/automvc/BeePy/
http://www.jsqmd.com/news/1151110/

相关文章:

  • 哪个AI可以做长视频?即梦Seedance 2.5 将是做长视频唯一选择!
  • Linux 没有桌面?Docker 跑 Webtop,浏览器图形化管理服务器
  • 基于TLA2518与PIC18F45K80的高精度多通道ADC系统设计
  • 运营不会写代码,也能用Codex做报表自动化吗?2026小工具落地教程
  • 抖音批量下载神器:3分钟学会自动化内容收集与管理
  • ADS7828与PIC18F96J94构建高精度信号采集系统
  • Bilibili-Old:三分钟找回那个让你心动的经典B站界面
  • Grammarly高级版Cookie自动获取工具:技术原理与实战指南
  • Agent工具能否与自研系统深度集成?深度拆解企业级AI Agent与私有业务系统的交互范式与集成路径
  • ResNet-18/34/50/101/152 模型部署:PyTorch 转 ONNX 再转 TensorRT 的 5 步优化
  • 快速上手Deepin升级工具:10分钟掌握Deepin软件更新核心功能
  • AD5593R与PIC18LF45K80在嵌入式信号处理中的高效组合
  • 3种工业表计识别方案对比:Im-YOLOv4-Tiny vs YOLOv3改进 vs Hourglass网络
  • 一次购买终身可用的wordpress付费主题
  • 基于 GPU 的排序加速:内存
  • EfficientNet-B0 到 B3 复合缩放实战:4 个模型在 224x224 输入下的精度/速度权衡
  • zynq在u-boot中导入导出Flash文件
  • MHmarkets迈汇平台:聚焦细节,看看合规意识的关键要点
  • Grafana Loki日志聚合方案实战:替代传统ELK的低成本高并发日志平台选型落地
  • 3步构建自平衡轮腿机器人:从算法仿真到硬件部署完整指南
  • 抖音内容高效下载的终极解决方案:douyin-downloader完全指南
  • Docker:终结“在我机器上能跑”的魔咒,小白也能懂的容器化指南
  • 谷歌旧将 Nick Desaulniers 重返,提交补丁助力 Linux 内核发展
  • Java Scanner 类精讲:控制台交互
  • Vue3 组件通信八种模式的全景对比与选型矩阵
  • BsMax插件:让3ds Max用户在Blender中无缝工作的终极解决方案
  • 5分钟快速上手:wvp-GB28181-pro国标视频监控平台完整指南
  • 锂离子电池组主动均衡技术解析与MP2672A应用实践
  • linux 虚拟机 WSL2和 VMware/VirtualBo怎么比 性能对比 优势劣势都有哪些
  • 【开发者私藏手册】:ChatGPT API Key 获取的7个致命误区(第4条导致83%账号被限流)