ezKit 1.10.4__tar.gz → 1.10.5__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ezKit
3
- Version: 1.10.4
3
+ Version: 1.10.5
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -6,8 +6,10 @@
6
6
  # PostgreSQL 14 Data Types
7
7
  # https://www.postgresql.org/docs/14/datatype.html
8
8
  import csv
9
+ import json
9
10
  from typing import Any
10
11
 
12
+ import pandas as pd
11
13
  from loguru import logger
12
14
  from sqlalchemy import CursorResult, Index, create_engine, text
13
15
  from sqlalchemy.orm import DeclarativeBase
@@ -30,10 +32,14 @@ class Database():
30
32
  else:
31
33
  pass
32
34
 
35
+ # ----------------------------------------------------------------------------------------------
36
+
33
37
  def initializer(self):
34
38
  """ensure the parent proc's database connections are not touched in the new connection pool"""
35
39
  self.engine.dispose(close=False)
36
40
 
41
+ # ----------------------------------------------------------------------------------------------
42
+
37
43
  def connect_test(self) -> bool:
38
44
  info = "Database connect test"
39
45
  try:
@@ -46,6 +52,8 @@ class Database():
46
52
  logger.exception(e)
47
53
  return False
48
54
 
55
+ # ----------------------------------------------------------------------------------------------
56
+
49
57
  def metadata_init(self, base: DeclarativeBase, **kwargs) -> bool:
50
58
  # https://stackoverflow.com/questions/19175311/how-to-create-only-one-table-with-sqlalchemy
51
59
  info = "Database init table"
@@ -60,6 +68,8 @@ class Database():
60
68
  logger.exception(e)
61
69
  return False
62
70
 
71
+ # ----------------------------------------------------------------------------------------------
72
+
63
73
  def create_index(self, index_name, table_field) -> bool:
64
74
  # 创建索引
65
75
  # https://stackoverflow.com/a/41254430
@@ -82,6 +92,8 @@ class Database():
82
92
  logger.error(e)
83
93
  return False
84
94
 
95
+ # ----------------------------------------------------------------------------------------------
96
+
85
97
  # 私有函数, 保存 execute 的结果到 CSV 文件
86
98
  def _result_save(self, file, data) -> bool:
87
99
  try:
@@ -93,6 +105,8 @@ class Database():
93
105
  logger.exception(e)
94
106
  return False
95
107
 
108
+ # ----------------------------------------------------------------------------------------------
109
+
96
110
  def execute(
97
111
  self,
98
112
  sql: str | None = None,
@@ -204,3 +218,46 @@ class Database():
204
218
  logger.error(f'{info} [failure]')
205
219
  logger.exception(e)
206
220
  return False
221
+
222
+ # ----------------------------------------------------------------------------------------------
223
+
224
+ def read_data_with_pandas(self, result_type: str = "df", **kwargs) -> pd.DataFrame | dict | list | None:
225
+ """读取表中所有数据"""
226
+
227
+ # 使用 pd.read_sql_table 的参数
228
+ # read_data_with_pandas(result_type="df", table_name="ashare")
229
+
230
+ info = f"读取 {kwargs.get('table_name', None)} 表中所有数据"
231
+
232
+ try:
233
+
234
+ logger.info(f"{info} ......")
235
+
236
+ # 从 kwargs 中删除 con 键
237
+ kwargs.pop('con', None)
238
+
239
+ # 读取数据
240
+ data: pd.DataFrame = pd.read_sql_table(con=self.engine, **kwargs)
241
+
242
+ if data.empty:
243
+ logger.error(f"{info} [失败]")
244
+ return None
245
+
246
+ logger.success(f"{info} [成功]")
247
+
248
+ if utils.isTrue(result_type, str) and result_type == "json":
249
+ return json.loads(data.to_json(orient='records'))
250
+
251
+ if utils.isTrue(result_type, str) and result_type == "dict":
252
+ return data.to_dict()
253
+
254
+ if utils.isTrue(result_type, str) and result_type == "list":
255
+ # https://stackoverflow.com/a/26716774
256
+ return data.to_dict('list')
257
+
258
+ return data
259
+
260
+ except Exception as e:
261
+ logger.error(f"{info} [失败]")
262
+ logger.exception(e)
263
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ezKit
3
- Version: 1.10.4
3
+ Version: 1.10.5
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -3,7 +3,7 @@ from setuptools import find_packages, setup
3
3
 
4
4
  setup(
5
5
  name='ezKit',
6
- version='1.10.4',
6
+ version='1.10.5',
7
7
  author='septvean',
8
8
  author_email='septvean@gmail.com',
9
9
  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