ezKit 1.12.7__tar.gz → 1.12.9__tar.gz

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.
Files changed (28) hide show
  1. {ezkit-1.12.7/ezKit.egg-info → ezkit-1.12.9}/PKG-INFO +1 -1
  2. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/database.py +60 -3
  3. {ezkit-1.12.7 → ezkit-1.12.9/ezKit.egg-info}/PKG-INFO +1 -1
  4. {ezkit-1.12.7 → ezkit-1.12.9}/setup.py +1 -1
  5. {ezkit-1.12.7 → ezkit-1.12.9}/LICENSE +0 -0
  6. {ezkit-1.12.7 → ezkit-1.12.9}/MANIFEST.in +0 -0
  7. {ezkit-1.12.7 → ezkit-1.12.9}/README.md +0 -0
  8. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/__init__.py +0 -0
  9. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/_file.py +0 -0
  10. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/bottle.py +0 -0
  11. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/bottle_extensions.py +0 -0
  12. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/cipher.py +0 -0
  13. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/dockerhub.py +0 -0
  14. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/http.py +0 -0
  15. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/markdown_to_html.template +0 -0
  16. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/mongo.py +0 -0
  17. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/qywx.py +0 -0
  18. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/redis.py +0 -0
  19. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/sendemail.py +0 -0
  20. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/token.py +0 -0
  21. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/utils.py +0 -0
  22. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/xftp.py +0 -0
  23. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit/zabbix.py +0 -0
  24. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit.egg-info/SOURCES.txt +0 -0
  25. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit.egg-info/dependency_links.txt +0 -0
  26. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit.egg-info/requires.txt +0 -0
  27. {ezkit-1.12.7 → ezkit-1.12.9}/ezKit.egg-info/top_level.txt +0 -0
  28. {ezkit-1.12.7 → ezkit-1.12.9}/setup.cfg +0 -0
@@ -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
@@ -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
@@ -4,7 +4,7 @@ from setuptools import find_packages, setup
4
4
 
5
5
  setup(
6
6
  name="ezKit",
7
- version="1.12.7",
7
+ version="1.12.9",
8
8
  author="septvean",
9
9
  author_email="septvean@gmail.com",
10
10
  description="Easy Kit",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes