ezKit 1.12.7__py3-none-any.whl → 1.12.9__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, Type
14
14
 
15
15
  import pandas as pd
16
16
  from loguru import logger
17
- from sqlalchemy import CursorResult, Index, create_engine, text
17
+ from sqlalchemy import CursorResult, Engine, Index, create_engine, text
18
18
  from sqlalchemy.orm import DeclarativeBase, Session, declarative_base
19
19
 
20
20
  from . import utils
@@ -67,14 +67,71 @@ def orm_to_dict(obj, include: list | None = None) -> dict | list | None:
67
67
  return None
68
68
 
69
69
 
70
+ def build_raw_where_clause(data: dict) -> tuple[str, list] | None:
71
+ """
72
+ 将字段数据转换为 SQL WHERE 条件(使用原生 SQL)
73
+ 支持字段后缀操作: __like, __gt, __lt, __ne, __in, __between
74
+ 返回值: SQL字符串和参数列表 (为了避免 SQL 注入风险, 不直接返回 SQL 语句)
75
+ """
76
+
77
+ try:
78
+
79
+ sql_parts = []
80
+ params = []
81
+
82
+ for field, value in data.items():
83
+
84
+ if "__" in field:
85
+
86
+ base, op = field.split("__", 1)
87
+
88
+ if op == "like":
89
+ sql_parts.append(f"{base} LIKE %s")
90
+ params.append(f"%{value}%")
91
+ elif op == "gt":
92
+ sql_parts.append(f"{base} > %s")
93
+ params.append(value)
94
+ elif op == "lt":
95
+ sql_parts.append(f"{base} < %s")
96
+ params.append(value)
97
+ elif op == "ne":
98
+ sql_parts.append(f"{base} != %s")
99
+ params.append(value)
100
+ elif op == "in" and isinstance(value, list):
101
+ placeholders = ", ".join(["%s"] * len(value))
102
+ sql_parts.append(f"{base} IN ({placeholders})")
103
+ params.extend(value)
104
+ elif op == "between" and isinstance(value, list) and len(value) == 2:
105
+ sql_parts.append(f"{base} BETWEEN %s AND %s")
106
+ params.extend(value)
107
+
108
+ else:
109
+
110
+ sql_parts.append(f"{field} = %s")
111
+ params.append(value)
112
+
113
+ where_clause = " AND ".join(sql_parts)
114
+
115
+ return where_clause, params
116
+
117
+ except Exception as e:
118
+ logger.exception(e)
119
+ return None
120
+
121
+
122
+ # --------------------------------------------------------------------------------------------------
123
+
124
+
70
125
  class Database:
71
126
  """Database"""
72
127
 
73
128
  engine = create_engine("sqlite://")
74
129
 
75
- def __init__(self, target: str | None = None, **options):
130
+ def __init__(self, engine: Engine | None = None, target: str | None = None, **options):
76
131
  """Initiation"""
77
- if isinstance(target, str) and utils.isTrue(target, str):
132
+ if engine is not None:
133
+ self.engine = engine
134
+ elif isinstance(target, str) and utils.isTrue(target, str):
78
135
  if utils.isTrue(options, dict):
79
136
  self.engine = create_engine(target, **options)
80
137
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ezKit
3
- Version: 1.12.7
3
+ Version: 1.12.9
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=1_RmCwLA6kzigcMcewkoOYStkhFd_w-Qn84vGy-tInI,15553
6
+ ezKit/database.py,sha256=ELGWG865NREOPosU2vQ723juns9cWe9YM0IDAHYpfaE,17478
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=VyAw2yEs15VER9RCpMgskx1l0zrSpRlV34X___eOia0,42416
16
16
  ezKit/xftp.py,sha256=-XQXyhMqeigT63P6sXkSS7r4GROXyqqlkzKxITLWG-g,8278
17
17
  ezKit/zabbix.py,sha256=PkMnfu7mcuotwwIIsHaC9FsNg-gap6hD1xvm0AwSL1Y,33777
18
- ezkit-1.12.7.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
- ezkit-1.12.7.dist-info/METADATA,sha256=1uzq8FpjYS1rIP8iewgixWFGzahSaQe32exFrp2xYyc,316
20
- ezkit-1.12.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
- ezkit-1.12.7.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
- ezkit-1.12.7.dist-info/RECORD,,
18
+ ezkit-1.12.9.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
19
+ ezkit-1.12.9.dist-info/METADATA,sha256=YevXxco-dLFiNfXfl32UpHll2BRFUOQRcJ6k3JqIc_w,316
20
+ ezkit-1.12.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
21
+ ezkit-1.12.9.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
22
+ ezkit-1.12.9.dist-info/RECORD,,
File without changes