From 7e24585db0404b7d002008e36bab40e7ee9749c6 Mon Sep 17 00:00:00 2001 From: aiteasoft Date: Wed, 22 Jan 2025 15:12:00 +0800 Subject: [PATCH 1/2] add PreparedSql support custom SQL --- src/bee/SqlUtil.py | 50 ++++++++++++++++++++++++++++++ tests/exam150/BatchInsertTest2.py | 44 ++++++++++++++++++++++++++ tests/exam150/PreTest.py | 23 ++++++++++++++ tests/exam150/PreTest2.py | 18 +++++++++++ tests/exam150/bee.db | Bin 8192 -> 8192 bytes 5 files changed, 135 insertions(+) create mode 100644 src/bee/SqlUtil.py create mode 100644 tests/exam150/BatchInsertTest2.py create mode 100644 tests/exam150/PreTest.py create mode 100644 tests/exam150/PreTest2.py diff --git a/src/bee/SqlUtil.py b/src/bee/SqlUtil.py new file mode 100644 index 0000000..ed3a859 --- /dev/null +++ b/src/bee/SqlUtil.py @@ -0,0 +1,50 @@ + +import re +from bee.paging import Paging + +# SqlUtil.py + + +def add_paging(sql, start, size): + + if start is None and size is None: + return sql + + if start is None: + start = 0 + + if size is None: + size = 100 #TODO get from config + + paging = Paging() + sql = paging.to_page_sql(sql, start, size) + + return sql + +def transform_sql(sql, params_dict=None): + if params_dict is None: + return sql + # params_dict = {} + + # 用于存储处理后的 SQL 查询和参数 + para_array = [] + + # 用正则表达式匹配所有类似 #{variable} 的模式 + def replace_placeholder(match): + # 提取变量名 + var_name = match.group(1) + # 将变量名添加到参数数组 + para_array.append(var_name) + return '?' + + # 使用正则替换查询中的变量 + sql_transformed = re.sub(r'#\{(\w+)\}', replace_placeholder, sql) + + # 从 params_dict 中获取参数值,生成参数元组 + params_tuple = tuple(params_dict[var] for var in para_array) + + # 这里可以执行 SQL 查询、返回结果等 + # print(sql_transformed, params_tuple) # Debug output + # 假设你实现了数据库查询逻辑,可以在此处添加更多代码。 + + return sql_transformed, params_tuple diff --git a/tests/exam150/BatchInsertTest2.py b/tests/exam150/BatchInsertTest2.py new file mode 100644 index 0000000..289b487 --- /dev/null +++ b/tests/exam150/BatchInsertTest2.py @@ -0,0 +1,44 @@ +""" batch insert for orders """ + +from bee.api import SuidRich +from bee.config import PreConfig +from bee.sqllib import BeeSql +from entity.Orders import Orders + + +if __name__ == '__main__': + print("start") + + PreConfig.config_folder_root_path="E:\\JavaWeb\\eclipse-workspace202312\\BeePy-automvc\\tests\\exam" + + createSql = """ + CREATE TABLE orders ( + id INTEGER PRIMARY KEY NOT NULL, + name VARCHAR(100), + age INT, + remark VARCHAR(100), + ext VARCHAR(100) + ); + """ + + # beeSql=BeeSql() + # # beeSql.modify(createSql, []) + # beeSql.modify(createSql) + + orders0=Orders() + orders0.name = "bee" + orders0.remark="remark test" + + orders1=Orders() + orders1.name = "bee1" + orders1.remark="remark test1" + + entity_list=[] + entity_list.append(orders0) + entity_list.append(orders1) + + suidRich = SuidRich() + insertNum = suidRich.insert_batch(entity_list) + print(insertNum) + + print("finished") diff --git a/tests/exam150/PreTest.py b/tests/exam150/PreTest.py new file mode 100644 index 0000000..74fa84b --- /dev/null +++ b/tests/exam150/PreTest.py @@ -0,0 +1,23 @@ +from bee.api import PreparedSql +from bee.config import PreConfig +from entity.Orders import Orders + + +if __name__=="__main__": + + PreConfig.config_folder_root_path="E:\\JavaWeb\\eclipse-workspace202312\\BeePy-automvc\\tests\\exam" + + pre=PreparedSql() + + # pre.select("select * from orders", "Orders", params=["active"], start=1,size=10) + # pre.select("select * from orders where name=?", Orders, params=["bee"]) + # pre.select("select * from orders where name=?", Orders, params=["bee"], size=10) + # one =pre.select("select * from orders where name=?", Orders, params=["bee"], start=1) + # print(one) + print("-------------------") + one =pre.select("select * from orders", Orders) + print(one) + print("-------------------") + one =pre.select("select * from orders", Orders,size=2) + print(one) + print("finished") diff --git a/tests/exam150/PreTest2.py b/tests/exam150/PreTest2.py new file mode 100644 index 0000000..bc37438 --- /dev/null +++ b/tests/exam150/PreTest2.py @@ -0,0 +1,18 @@ +from bee.api import PreparedSql +from bee.config import PreConfig +from entity.Orders import Orders + + +if __name__=="__main__": + + PreConfig.config_folder_root_path="E:\\JavaWeb\\eclipse-workspace202312\\BeePy-automvc\\tests\\exam" + + pre=PreparedSql() + + print("-------------------") + one =pre.select_dict("SELECT * FROM orders WHERE name=#{name} and id=#{id} and name=#{name}", Orders,params_dict ={"name":"bee1","id":4}) + print(one) + print("-------------------") + # one =pre.select_dict("SELECT * FROM orders WHERE name=#{name}", Orders,params_dict = {'name': 'bee'},size=2) + # print(one) + print("finished") diff --git a/tests/exam150/bee.db b/tests/exam150/bee.db index b46c88fe821dd7933e9d565c158d09ccd513ff3b..ae4d01c4c42c8c4f3ed62ddd2dda4b7150b4826b 100644 GIT binary patch delta 90 zcmZp0XmFSy&B!uQ#+i|2W5N=C0XF_J2L4z4m-zSaFX8XwFWW3Aki@Si#>U1V%Am@S jl$vT-l$x7Zl&w&bT3li%!pg=V%%BVsM-raAL_P)pP~sU= delta 42 ycmZp0XmFSy&B#1a#+i|MW5N=C9v1#34E(S7FY)i;U$R+IAe4V%gZ<7 -- Gitee From 8d7f57e0da25d62f964cf23036f3708f732b4893 Mon Sep 17 00:00:00 2001 From: aiteasoft Date: Wed, 22 Jan 2025 15:12:56 +0800 Subject: [PATCH 2/2] add PreparedSql support custom SQL --- src/bee/api.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/bee/api.py b/src/bee/api.py index 7c34f81..50673b2 100644 --- a/src/bee/api.py +++ b/src/bee/api.py @@ -123,3 +123,69 @@ class SuidRich(Suid): if listT: # 判断列表是否非空 return listT[0] # 返回首个元素 return None + +# for custom SQL +class PreparedSql: + + """ + eg: + """ + def select(self, sql, return_type, params=None, start=None, size=None): # TODO 参数类型??? + if sql is None: + return None + if return_type is None: + return None + try: + sql = SqlUtil.add_paging(sql, start, size) + # print(".............."+sql) + + Logger.logsql("select SQL(PreparedSql):", sql) + Logger.logsql("params:", params) + return self.beeSql.select(sql, return_type, params) # 返回值用到泛型 + except Exception as e: + raise BeeException(e) + + + + """ + eg: select * from orders where userid=#{userid} + """ + + def select_dict(self, sql, return_type, params_dict=None, start=None, size=None): + transformed_sql, params = SqlUtil.transform_sql(sql, params_dict) + return self.select(transformed_sql, return_type, params, start, size) + + """ + eg: + """ + # def modify(self, sql: str, params=None) -> int: + def modify(self, sql, params=None): + try: + Logger.logsql("modify SQL(PreparedSql):", sql) + Logger.logsql("params:", params) + return self.beeSql.modify(sql, params) + except Exception as e: + raise BeeException(e) + + """ + eg: + """ + def modify_dict(self, sql, dict_params=None): + pass + + + def __init__(self): + self._beeSql = None + self._objToSQL = None + + @property + def beeSql(self): + if self._beeSql is None: + # self._beeSql = BeeFactory.get_honey_factory().get_beeSql() + self._beeSql = BeeSql() + return self._beeSql + + @beeSql.setter + def beeSql(self, beeSql): + self._beeSql = beeSql + -- Gitee