ezKit 1.12.23__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 +63 -2
- {ezkit-1.12.23.dist-info → ezkit-1.12.24.dist-info}/METADATA +1 -1
- {ezkit-1.12.23.dist-info → ezkit-1.12.24.dist-info}/RECORD +6 -6
- {ezkit-1.12.23.dist-info → ezkit-1.12.24.dist-info}/WHEEL +0 -0
- {ezkit-1.12.23.dist-info → ezkit-1.12.24.dist-info}/licenses/LICENSE +0 -0
- {ezkit-1.12.23.dist-info → ezkit-1.12.24.dist-info}/top_level.txt +0 -0
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,
|
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,7 +665,7 @@ class DatabaseAsyncSession:
|
|
604
665
|
|
605
666
|
# 执行器 (CRUD都可以执行. 即可以执行原生SQL, 也可以执行ORM)
|
606
667
|
# statement: SQL 或者 insert(schema)等
|
607
|
-
# params: List[dict]
|
668
|
+
# params: List[dict] (非必要)
|
608
669
|
async def operater(self, statement, params: Any | None = None, **kwargs) -> Result | None:
|
609
670
|
|
610
671
|
async with self.AsyncSessionLocal() as session:
|
@@ -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=
|
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.
|
19
|
-
ezkit-1.12.
|
20
|
-
ezkit-1.12.
|
21
|
-
ezkit-1.12.
|
22
|
-
ezkit-1.12.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|