bee
V1.9.0
ORM Bee in Python!
Bee in Python url: https://github.com/automvc/BeePy
Bee in Java url: https://github.com/automvc/bee
Quick Start:
Installation
To install, type:
pip install ormbee
ORM Bee pypi url: https://pypi.org/project/ormbee/
1. set db config
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',
'password': '',
'database': 'bee',
'port':3306
}
honeyConfig= HoneyConfig()
honeyConfig.set_db_config_dict(dict_config)
1.3.set connection directly:
config = {
# 'dbname':'MySQL',
'host': 'localhost',
'user': 'root',
'password': '',
'database': 'bee',
'port':3306
}
honeyConfig= HoneyConfig()
honeyConfig.set_dbname("MySQL")
conn = pymysql.connect(**config)
factory=BeeFactory()
factory.set_connection(conn)
2. operate DB with 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
# complex where statement constructor Condition
3. MoreTable(Mul-table) Select
from bee.bee_enum import JoinType
from bee.honeyfactory import BF
from bee.anno import JoinTable
import MyConfig
# one to many, layer is 4.
class Village:
# table village 's entity
id: int = None
name: str = None
level: int = None
remark: str = None
town_id: int = None
def __repr__(self):
return str(self.__dict__)
class Town:
# 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):
return str(self.__dict__)
class City:
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):
return str(self.__dict__)
class Province:
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):
return str(self.__dict__)
if __name__ == '__main__':
MyConfig.init()
province = Province()
moreTable = BF.moreTable()
mylist = moreTable.select(province)
# # select top 2 records
# condition = BF.condition()
# condtion.start(0)
# condtion.size(2)
# teaList = moreTable.select(province, condition)
# print(len(mylist))
if mylist:
for one in mylist:
print(one)
4. Others
Main API in 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,unique
PreparedSql: select, select_dict, modify, modify_dict
Condition: used to construct complex WHERE, UPDATE statements and so on.
Corresponding Java type ORM tool, JAVA ORM Bee:
maven:
<dependency>
<groupId>org.teasoft</groupId>
<artifactId>bee-all</artifactId>
<version>2.5.10</version>
</dependency>
Gradle(Short):
implementation 'org.teasoft:bee-all:2.5.10'
note:the version can change to newest.