reydb 1.1.57__py3-none-any.whl → 1.1.59__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.
reydb/rparam.py CHANGED
@@ -9,20 +9,179 @@
9
9
  """
10
10
 
11
11
 
12
- from typing import overload
12
+ from typing import Generic, overload
13
13
 
14
14
  from . import rdb
15
- from .rbase import DatabaseBase
15
+ from .rbase import DatabaseT, DatabaseBase
16
+ from .rexec import Result
16
17
 
17
18
 
18
19
  __all__ = (
20
+ 'DatabaseSchema',
19
21
  'DatabaseParameters',
20
22
  'DatabaseParametersStatus',
21
- 'DatabaseParametersVariable',
22
- 'DatabaseParametersPragma'
23
+ 'DatabaseParametersVariable'
23
24
  )
24
25
 
25
26
 
27
+ class DatabaseSchemaSuper(DatabaseBase, Generic[DatabaseT]):
28
+ """
29
+ Database schema super type.
30
+ """
31
+
32
+
33
+ def __init__(self, db: DatabaseT) -> None:
34
+ """
35
+ Build instance attributes.
36
+
37
+ Parameters
38
+ ----------
39
+ db: Database instance.
40
+ """
41
+
42
+ # Set parameter.
43
+ self.db = db
44
+
45
+
46
+ def _call__before(self, filter_default: bool = True) -> tuple[str, tuple[str, ...]]:
47
+ """
48
+ Before handle of call method.
49
+
50
+ Parameters
51
+ ----------
52
+ filter_default : Whether filter default database.
53
+
54
+ Returns
55
+ -------
56
+ Parameter `sql` and `filter_db`.
57
+ """
58
+
59
+ # Handle parameter.
60
+ filter_db = (
61
+ 'information_schema',
62
+ 'performance_schema',
63
+ 'mysql',
64
+ 'sys'
65
+ )
66
+ if filter_default:
67
+ where_database = 'WHERE `SCHEMA_NAME` NOT IN :filter_db\n'
68
+ where_column = ' WHERE `TABLE_SCHEMA` NOT IN :filter_db\n'
69
+ else:
70
+ where_database = where_column = ''
71
+
72
+ # Select.
73
+ sql = (
74
+ 'SELECT GROUP_CONCAT(`SCHEMA_NAME`) AS `TABLE_SCHEMA`, NULL AS `TABLE_NAME`, NULL AS `COLUMN_NAME`\n'
75
+ 'FROM `information_schema`.`SCHEMATA`\n'
76
+ f'{where_database}'
77
+ 'UNION ALL (\n'
78
+ ' SELECT `TABLE_SCHEMA`, `TABLE_NAME`, `COLUMN_NAME`\n'
79
+ ' FROM `information_schema`.`COLUMNS`\n'
80
+ f'{where_column}'
81
+ ' ORDER BY `TABLE_SCHEMA`, `TABLE_NAME`, `ORDINAL_POSITION`\n'
82
+ ')'
83
+ )
84
+
85
+ return sql, filter_db
86
+
87
+
88
+ def _call__after(self, result: Result) -> dict[str, dict[str, list[str]]]:
89
+ """
90
+ After handle of call method.
91
+
92
+ Parameters
93
+ ----------
94
+ result : Database select result.
95
+
96
+ Returns
97
+ -------
98
+ Parameter `schema_dict`.
99
+ """
100
+
101
+ # Convert.
102
+ database_names, *_ = result.fetchone()
103
+ database_names: list[str] = database_names.split(',')
104
+ schema_dict = {}
105
+ for database, table, column in result:
106
+ if database in database_names:
107
+ database_names.remove(database)
108
+
109
+ ## Index database.
110
+ if database not in schema_dict:
111
+ schema_dict[database] = {table: [column]}
112
+ continue
113
+ table_dict: dict = schema_dict[database]
114
+
115
+ ## Index table.
116
+ if table not in table_dict:
117
+ table_dict[table] = [column]
118
+ continue
119
+ column_list: list = table_dict[table]
120
+
121
+ ## Add column.
122
+ column_list.append(column)
123
+
124
+ ## Add empty database.
125
+ for name in database_names:
126
+ schema_dict[name] = None
127
+
128
+ return schema_dict
129
+
130
+
131
+ class DatabaseSchema(DatabaseSchemaSuper['rdb.Database']):
132
+ """
133
+ Database schema type.
134
+ """
135
+
136
+
137
+ def __call__(self, filter_default: bool = True) -> dict[str, dict[str, list[str]]]:
138
+ """
139
+ Get schemata of databases and tables and columns.
140
+
141
+ Parameters
142
+ ----------
143
+ filter_default : Whether filter default database.
144
+
145
+ Returns
146
+ -------
147
+ Schemata of databases and tables and columns.
148
+ """
149
+
150
+ # Get.
151
+ sql, filter_db = self._call__before(filter_default)
152
+ result = self.db.execute(sql, filter_db=filter_db)
153
+ schema_dict = self._call__after(result)
154
+
155
+ return schema_dict
156
+
157
+
158
+ class DatabaseSchemaAsync(DatabaseSchemaSuper['rdb.DatabaseAsync']):
159
+ """
160
+ Asynchronous database schema type.
161
+ """
162
+
163
+
164
+ async def __call__(self, filter_default: bool = True) -> dict[str, dict[str, list[str]]]:
165
+ """
166
+ Asynchronous get schemata of databases and tables and columns.
167
+
168
+ Parameters
169
+ ----------
170
+ filter_default : Whether filter default database.
171
+
172
+ Returns
173
+ -------
174
+ Schemata of databases and tables and columns.
175
+ """
176
+
177
+ # Get.
178
+ sql, filter_db = self._call__before(filter_default)
179
+ result = await self.db.execute(sql, filter_db=filter_db)
180
+ schema_dict = self._call__after(result)
181
+
182
+ return schema_dict
183
+
184
+
26
185
  class DatabaseParameters(DatabaseBase):
27
186
  """
28
187
  Database parameters type.
@@ -39,7 +198,7 @@ class DatabaseParameters(DatabaseBase):
39
198
 
40
199
  Parameters
41
200
  ----------
42
- db: `Database` instance.
201
+ db: Database instance.
43
202
  global\\_ : Whether base global.
44
203
  """
45
204
 
@@ -244,79 +403,3 @@ class DatabaseParametersVariable(DatabaseParameters):
244
403
 
245
404
  # Execute SQL.
246
405
  self.db.execute(sql)
247
-
248
-
249
- class DatabaseParametersPragma(DatabaseParameters):
250
- """
251
- Database parameters pragma type.
252
- """
253
-
254
-
255
- def __init__(
256
- self,
257
- db: 'rdb.Database'
258
- ) -> None:
259
- """
260
- Build instance attributes.
261
-
262
- Parameters
263
- ----------
264
- db: `Database` instance.
265
- """
266
-
267
- # Set parameter.
268
- self.db = db
269
-
270
-
271
- def get(self, key: str) -> str | None:
272
- """
273
- Get parameter.
274
-
275
- Parameters
276
- ----------
277
- key : Parameter key.
278
-
279
- Returns
280
- -------
281
- Variables of database.
282
- """
283
-
284
- # Generate SQL.
285
- sql = f'PRAGMA %s' % key
286
-
287
- # Execute SQL.
288
- result = self.db.execute(sql)
289
- row = result.first()
290
- if row is None:
291
- variables = None
292
- else:
293
- variables = row[0]
294
-
295
- return variables
296
-
297
-
298
- def update(self, params: dict[str, str | float]) -> None:
299
- """
300
- Update parameter.
301
-
302
- Parameters
303
- ----------
304
- params : Update parameter key value pairs.
305
- """
306
-
307
- # Generate SQL.
308
- sql_set_list = [
309
- 'PRAGMA %s = %s' % (
310
- key,
311
- (
312
- value
313
- if type(value) in (int, float)
314
- else "'%s'" % value
315
- )
316
- )
317
- for key, value in params.items()
318
- ]
319
- sql = ';\n'.join(sql_set_list)
320
-
321
- # Execute SQL.
322
- self.db.execute(sql)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reydb
3
- Version: 1.1.57
3
+ Version: 1.1.59
4
4
  Summary: Database method set.
5
5
  Project-URL: homepage, https://github.com/reyxbo/reydb/
6
6
  Author-email: Rey <reyxbo@163.com>
@@ -14,6 +14,7 @@ License: Copyright 2025 ReyXBo
14
14
  License-File: LICENSE
15
15
  Keywords: database,db,rey,reyxbo
16
16
  Requires-Python: >=3.12
17
+ Requires-Dist: aiomysql
17
18
  Requires-Dist: pydantic
18
19
  Requires-Dist: pymysql
19
20
  Requires-Dist: reykit
@@ -0,0 +1,17 @@
1
+ reydb/__init__.py,sha256=h6duExQWsPCz3qKnTIHTslmqcBC63HCQvwiumg8oCVc,620
2
+ reydb/rall.py,sha256=GsXHqvT1k--U53HpDY4SALjIHN8rwgSxeXpJjH5gq2E,409
3
+ reydb/rbase.py,sha256=Bc9upS6nRCYH05Js-UQrq6Fn3BDchD_TMO87h9o44Mg,10010
4
+ reydb/rbuild.py,sha256=agCVP5MehdAkNGevOdioZgagFZyNxAjMHuKn7jIxTCg,31848
5
+ reydb/rconfig.py,sha256=4-SRhwhd3GqGiRhwbAjCfxVz6tBOQ2ab6n_lrb35rUE,12694
6
+ reydb/rconn.py,sha256=T4FdgycCeGg2HU6L1AQm3KFwpqCpxNA0r8-la4ETBio,6523
7
+ reydb/rdb.py,sha256=GpBNmqbU0Tc4PPfgiQexPAEkQBxzfKKW-9Fh_iAGqkw,11772
8
+ reydb/rerror.py,sha256=f713YXSwWgls5352KvvX9LiTT_PcsPjZcSjZnFbFbVo,9939
9
+ reydb/rexec.py,sha256=o-VnFDprMeaQlQIX5_cHXHHchR5hRHWeJuFIqhVjBQ0,52835
10
+ reydb/rfile.py,sha256=N-uJRT2PFDNv1gKyHAb9t8n8xPOdic3SpzML-C0Bi-0,15180
11
+ reydb/rinfo.py,sha256=qW9QoGuMaMO2Fr76FCETE0TES_4CscagAceZtXc2qsU,12749
12
+ reydb/rorm.py,sha256=_q73ELHTN6C-xXMFwywgqvojXIus3aj48vZzSnFu5YQ,38924
13
+ reydb/rparam.py,sha256=2S3uuZ42ieGbc-0W202h6aM-chDMbp4qr-AWzOtk7vk,9629
14
+ reydb-1.1.59.dist-info/METADATA,sha256=msmEqxR0LkoXeH_vwtS9vmlqn4u_UTBkE7rL4j5pTQ4,1622
15
+ reydb-1.1.59.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ reydb-1.1.59.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
+ reydb-1.1.59.dist-info/RECORD,,
@@ -1,17 +0,0 @@
1
- reydb/__init__.py,sha256=h6duExQWsPCz3qKnTIHTslmqcBC63HCQvwiumg8oCVc,620
2
- reydb/rall.py,sha256=GsXHqvT1k--U53HpDY4SALjIHN8rwgSxeXpJjH5gq2E,409
3
- reydb/rbase.py,sha256=oMxftAVOPrX-8EcIzBUpTZ2aVbMJzxBkMlgjJN1Ilv0,9344
4
- reydb/rbuild.py,sha256=6K6u8GKECiYakvJ0mmQJduwN4oDLnBS6S0A1AG5A4fA,31850
5
- reydb/rconfig.py,sha256=OGVv6JT3_hN1nxI4B0oxC8281_vMQxjQbLjxGEDP5LE,12657
6
- reydb/rconn.py,sha256=N9KzvhG_1b_e0vXSfifFV2Yq2Tf2QFAsHQcCOZglGlI,6534
7
- reydb/rdb.py,sha256=cxacqHUegl_30NQRXSCMtqFrUCACye-Nt_pteU4Mw3Y,13187
8
- reydb/rerror.py,sha256=5n0poj6uLpKwmvlXVvfsFMqJ9NuVJ1HshoJgC8yQxLs,9941
9
- reydb/rexec.py,sha256=-Oo1qnK4gjWlGqvYz8zYyack1QySGQZcv5SApVp-EQU,52840
10
- reydb/rfile.py,sha256=VcjQtsH-xQbWFkk0gpJ8s66jYxwAfiAJkHJ-V-5jQIw,15182
11
- reydb/rinfo.py,sha256=jvFzK-zO2PP1ph7lo12tsvkP8cshoRe4rPdq0DiU44g,12757
12
- reydb/rorm.py,sha256=NiJoub0Ixm2TVCTajq6ktM3Oj5VQ2WBfoyn-QBGO6OQ,23694
13
- reydb/rparam.py,sha256=XqVQa_026dtpwuGDgJIm9Rtgd2pB34h3TL8cFKmf3uw,6807
14
- reydb-1.1.57.dist-info/METADATA,sha256=-rJlF25mWNFLY3I6njiz9YMEr0w6jLG5jRmW4Dp_9SY,1598
15
- reydb-1.1.57.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- reydb-1.1.57.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
- reydb-1.1.57.dist-info/RECORD,,
File without changes