ezKit 1.12.22__py3-none-any.whl → 1.12.24__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ezKit/database.py CHANGED
@@ -14,7 +14,7 @@ from typing import Any, Dict, List, Optional, Tuple, Type
14
14
 
15
15
  import pandas as pd
16
16
  from loguru import logger
17
- from sqlalchemy import CursorResult, Engine, Index, bindparam, create_engine, insert, text
17
+ from sqlalchemy import CursorResult, Engine, Index, bindparam, create_engine, text
18
18
  from sqlalchemy.engine import Result
19
19
  from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
20
20
  from sqlalchemy.orm import DeclarativeBase, Session, declarative_base
@@ -190,6 +190,67 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
190
190
  return None
191
191
 
192
192
 
193
+ def build_sqlalchemy_select_where(data: dict) -> tuple | None:
194
+ """Build SQLAlchemy select WHERE"""
195
+
196
+ try:
197
+
198
+ # 获取分页参数 (从 data 中取出 pageIndex 和 pageSize, 剩余的为查询参数)
199
+
200
+ pageIndex = data.pop("pageIndex", 1)
201
+ pageSize = data.pop("pageSize", 10)
202
+
203
+ limit, offset = get_limit_offset(pageIndex, pageSize)
204
+
205
+ # 构建 WHERE
206
+
207
+ build_result = build_sqlalchemy_where_clause(data)
208
+
209
+ if build_result is None:
210
+ logger.error("Build SQLAlchemy WHERE clause error")
211
+ return None
212
+
213
+ where_clause, sql_params, bind_params = build_result
214
+
215
+ # 添加 WHERE 前缀
216
+ if isinstance(where_clause, str) and where_clause.strip():
217
+ where_clause = f"WHERE {where_clause.strip()}"
218
+
219
+ # 分页参数
220
+ sql_params["limit"] = limit
221
+ sql_params["offset"] = offset
222
+
223
+ return where_clause, sql_params, bind_params
224
+
225
+ except Exception as e:
226
+ logger.exception(e)
227
+ return None
228
+
229
+
230
+ def build_sqlalchemy_update(tablename: str, where_data: dict, update_data: dict) -> tuple | None:
231
+ """Build SQLAlchemy update"""
232
+
233
+ # 构建 WHERE
234
+
235
+ build_result = build_sqlalchemy_where_clause(where_data)
236
+
237
+ if build_result is None:
238
+ logger.error("Build SQLAlchemy WHERE clause error")
239
+ return None
240
+
241
+ where_clause, sql_params, bind_params = build_result
242
+
243
+ # 构建 UPDATE SQL 语句 (SET 中 key 的 value 的 key 添加后缀 _value, 避免与 where 冲突)
244
+ sql: str = f"UPDATE {tablename} SET " + ", ".join([f"{k} = :{k}_value" for k in update_data.keys()]) + f" WHERE {where_clause}"
245
+
246
+ # 合并数据 (key 添加后缀 _value, 与 SQL 保持一致)
247
+ for k in update_data.keys():
248
+ sql_params[f"{k}_value"] = update_data[k]
249
+
250
+ # 返回 statement 和 params
251
+ return text(sql).bindparams(*bind_params), sql_params
252
+
253
+
193
254
  # --------------------------------------------------------------------------------------------------
194
255
 
195
256
 
@@ -604,8 +665,8 @@ class DatabaseAsyncSession:
604
665
 
605
666
  # 执行器 (CRUD都可以执行. 即可以执行原生SQL, 也可以执行ORM)
606
667
  # statement: SQL 或者 insert(schema)等
607
- # params: List[dict]
608
- async def operater(self, statement, params, **kwargs) -> Result | None:
668
+ # params: List[dict] (非必要)
669
+ async def operater(self, statement, params: Any | None = None, **kwargs) -> Result | None:
609
670
 
610
671
  async with self.AsyncSessionLocal() as session:
611
672
 
@@ -619,14 +680,14 @@ class DatabaseAsyncSession:
619
680
  return None
620
681
 
621
682
  # 精确返回一个标量结果 (适用于只返回一行数据的select, 比如 count 查询)
622
- async def operate_return_scalar_one(self, statement, params, **kwargs) -> Any | None:
683
+ async def operate_return_scalar_one(self, statement, params: Any | None = None, **kwargs) -> Any | None:
623
684
  result = await self.operater(statement, params, **kwargs)
624
685
  if result is None:
625
686
  return None
626
687
  return result.scalar_one()
627
688
 
628
689
  # 返回所有结果 (适用于所有select)
629
- async def operate_return_mappings_all(self, statement, params, **kwargs) -> List[Any]:
690
+ async def operate_return_mappings_all(self, statement, params: Any | None = None, **kwargs) -> List[Any]:
630
691
  result = await self.operater(statement, params, **kwargs)
631
692
  if result is None:
632
693
  return []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ezKit
3
- Version: 1.12.22
3
+ Version: 1.12.24
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -3,7 +3,7 @@ ezKit/_file.py,sha256=0qRZhwYuagTgTGrhm-tzAMvEQT4HTJA_xZKqF2bo0ho,1207
3
3
  ezKit/bottle.py,sha256=43h4v1kzz6qrLvCt5IMN0H-gFtaT0koG9wETqteXsps,181666
4
4
  ezKit/bottle_extensions.py,sha256=27rogmfK7mL2qUSjXH79IMGZbCVULtYEikql_N9O6Zs,1165
5
5
  ezKit/cipher.py,sha256=7jBarRH7ukSYzkz-Anl8B8JzluhnRz4CLHidPRRj_cg,2939
6
- ezKit/database.py,sha256=FRBiGppnBVUL621gBpH0QQVweBNtthPYXdUVqjxy8UM,21675
6
+ ezKit/database.py,sha256=5-hKwdRmjkvjaMR-c0Y71YL4RP8RZQMwcvTSRkDR12M,23625
7
7
  ezKit/dockerhub.py,sha256=j-wQO-71BsOgExHZhYynuy2k_hCX3on-vg0TH7QCit4,1996
8
8
  ezKit/http.py,sha256=zhNxJF-x91UqGncXWxVXnhZVpFo_wmmpGnMXVT11y9E,1832
9
9
  ezKit/markdown_to_html.template,sha256=21G2sSVGJn6aJvHd0NN4zY5YiDteKe4UtW36AzBwSdk,22274
@@ -15,8 +15,8 @@ ezKit/token.py,sha256=Ac-i9xfq4TqpGyfCzakjrh4NYzxHiN2sCQrMk1tzVi8,1716
15
15
  ezKit/utils.py,sha256=U457ahFkxIXuB-qWvS3995xJs-LlkFIX5_ZWVgmL5cY,43130
16
16
  ezKit/xftp.py,sha256=-XQXyhMqeigT63P6sXkSS7r4GROXyqqlkzKxITLWG-g,8278
17
17
  ezKit/zabbix.py,sha256=PkMnfu7mcuotwwIIsHaC9FsNg-gap6hD1xvm0AwSL1Y,33777
18
- ezkit-1.12.22.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
- ezkit-1.12.22.dist-info/METADATA,sha256=pP9V2RhAO6wobr0hoJ4O1w8wRmzlHct3x1T65oUBuSQ,317
20
- ezkit-1.12.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
- ezkit-1.12.22.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
- ezkit-1.12.22.dist-info/RECORD,,
18
+ ezkit-1.12.24.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
+ ezkit-1.12.24.dist-info/METADATA,sha256=hMehrY5rKRa8oHbzOJarQMHyPfyHVeJ3JlFFhNdYNbo,317
20
+ ezkit-1.12.24.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
+ ezkit-1.12.24.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
+ ezkit-1.12.24.dist-info/RECORD,,