ezKit 1.12.23__py3-none-any.whl → 1.12.25__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
@@ -9,12 +9,13 @@
9
9
 
10
10
  import csv
11
11
  import json
12
+ from copy import deepcopy
12
13
  from datetime import date, datetime
13
14
  from typing import Any, Dict, List, Optional, Tuple, Type
14
15
 
15
16
  import pandas as pd
16
17
  from loguru import logger
17
- from sqlalchemy import CursorResult, Engine, Index, bindparam, create_engine, insert, text
18
+ from sqlalchemy import CursorResult, Engine, Index, bindparam, create_engine, text
18
19
  from sqlalchemy.engine import Result
19
20
  from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
20
21
  from sqlalchemy.orm import DeclarativeBase, Session, declarative_base
@@ -121,11 +122,13 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
121
122
 
122
123
  try:
123
124
 
125
+ _data = deepcopy(data)
126
+
124
127
  sql_parts = []
125
128
  param_dict = {}
126
129
  bind_params = []
127
130
 
128
- for field, value in data.items():
131
+ for field, value in _data.items():
129
132
 
130
133
  # 特殊处理日期字段
131
134
  if field == "date" or field.startswith("date__"):
@@ -190,6 +193,69 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
190
193
  return None
191
194
 
192
195
 
196
+ def build_sqlalchemy_select_where(data: dict) -> tuple | None:
197
+ """Build SQLAlchemy select WHERE"""
198
+
199
+ try:
200
+
201
+ _data = deepcopy(data)
202
+
203
+ # 获取分页参数 (从 data 中取出 pageIndex 和 pageSize, 剩余的为查询参数)
204
+
205
+ pageIndex = _data.pop("pageIndex", 1)
206
+ pageSize = _data.pop("pageSize", 10)
207
+
208
+ limit, offset = get_limit_offset(pageIndex, pageSize)
209
+
210
+ # 构建 WHERE
211
+
212
+ build_result = build_sqlalchemy_where_clause(_data)
213
+
214
+ if build_result is None:
215
+ logger.error("Build SQLAlchemy WHERE clause error")
216
+ return None
217
+
218
+ where_clause, statement_params, bind_params = build_result
219
+
220
+ # 添加 WHERE 前缀
221
+ if isinstance(where_clause, str) and where_clause.strip():
222
+ where_clause = f"WHERE {where_clause.strip()}"
223
+
224
+ # 分页参数
225
+ statement_params["limit"] = limit
226
+ statement_params["offset"] = offset
227
+
228
+ return where_clause, statement_params, bind_params
229
+
230
+ except Exception as e:
231
+ logger.exception(e)
232
+ return None
233
+
234
+
235
+ def build_sqlalchemy_update(tablename: str, where_data: dict, update_data: dict) -> tuple | None:
236
+ """Build SQLAlchemy update"""
237
+
238
+ # 构建 WHERE
239
+
240
+ build_result = build_sqlalchemy_where_clause(where_data)
241
+
242
+ if build_result is None:
243
+ logger.error("Build SQLAlchemy WHERE clause error")
244
+ return None
245
+
246
+ where_clause, statement_params, bind_params = build_result
247
+
248
+ # 构建 UPDATE SQL 语句 (SET 中 key 的 value 的 key 添加后缀 _value, 避免与 where 冲突)
249
+ sql: str = f"UPDATE {tablename} SET " + ", ".join([f"{k} = :{k}_value" for k in update_data.keys()]) + f" WHERE {where_clause}"
250
+
251
+ # 合并数据 (key 添加后缀 _value, 与 SQL 保持一致)
252
+ for k in update_data.keys():
253
+ statement_params[f"{k}_value"] = update_data[k]
254
+
255
+ # 返回 statement 和 params
256
+ return text(sql).bindparams(*bind_params), statement_params
257
+
258
+
193
259
  # --------------------------------------------------------------------------------------------------
194
260
 
195
261
 
@@ -604,7 +670,7 @@ class DatabaseAsyncSession:
604
670
 
605
671
  # 执行器 (CRUD都可以执行. 即可以执行原生SQL, 也可以执行ORM)
606
672
  # statement: SQL 或者 insert(schema)等
607
- # params: List[dict]
673
+ # params: List[dict] (非必要)
608
674
  async def operater(self, statement, params: Any | None = None, **kwargs) -> Result | None:
609
675
 
610
676
  async with self.AsyncSessionLocal() as session:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ezKit
3
- Version: 1.12.23
3
+ Version: 1.12.25
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=ZvyxBr-_3XNTuyJTM_5HUJqeyAmLI-ftDAKTyab5wsw,21732
6
+ ezKit/database.py,sha256=yxi8HZw9ijbfKYhCl8OApoLDwLW7tYjPPucsTw6D_Is,23761
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.23.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
- ezkit-1.12.23.dist-info/METADATA,sha256=_uyFQwYed7tO-PoyfSnn5cEAQAz7lHU5thsZaegrOfo,317
20
- ezkit-1.12.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
- ezkit-1.12.23.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
- ezkit-1.12.23.dist-info/RECORD,,
18
+ ezkit-1.12.25.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
+ ezkit-1.12.25.dist-info/METADATA,sha256=RqZOmgEHjN2keW2iIPwRNjZcFuQByX9rX_me2dYiIx0,317
20
+ ezkit-1.12.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
+ ezkit-1.12.25.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
+ ezkit-1.12.25.dist-info/RECORD,,