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 +69 -3
- {ezkit-1.12.23.dist-info → ezkit-1.12.25.dist-info}/METADATA +1 -1
- {ezkit-1.12.23.dist-info → ezkit-1.12.25.dist-info}/RECORD +6 -6
- {ezkit-1.12.23.dist-info → ezkit-1.12.25.dist-info}/WHEEL +0 -0
- {ezkit-1.12.23.dist-info → ezkit-1.12.25.dist-info}/licenses/LICENSE +0 -0
- {ezkit-1.12.23.dist-info → ezkit-1.12.25.dist-info}/top_level.txt +0 -0
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,
|
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
|
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:
|
@@ -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=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.
|
19
|
-
ezkit-1.12.
|
20
|
-
ezkit-1.12.
|
21
|
-
ezkit-1.12.
|
22
|
-
ezkit-1.12.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|