thoth-dbmanager 0.5.0__py3-none-any.whl → 0.5.1__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.
@@ -4,18 +4,12 @@ Database adapters for Thoth SQL Database Manager.
4
4
 
5
5
  from .postgresql import PostgreSQLAdapter
6
6
  from .sqlite import SQLiteAdapter
7
- from .supabase import SupabaseAdapter
8
- from .mysql import MySQLAdapter
9
7
  from .mariadb import MariaDBAdapter
10
8
  from .sqlserver import SQLServerAdapter
11
- from .oracle import OracleAdapter
12
9
 
13
10
  __all__ = [
14
11
  "PostgreSQLAdapter",
15
12
  "SQLiteAdapter",
16
- "SupabaseAdapter",
17
- "MySQLAdapter",
18
13
  "MariaDBAdapter",
19
14
  "SQLServerAdapter",
20
- "OracleAdapter",
21
15
  ]
@@ -124,18 +124,10 @@ class ThothDbFactory:
124
124
  "required": ["host", "port", "database", "user", "password"],
125
125
  "optional": ["schema", "sslmode", "connect_timeout"]
126
126
  },
127
- "supabase": {
128
- "required": ["host", "port", "database", "user", "password"],
129
- "optional": ["schema", "sslmode", "connect_timeout", "project_url", "api_key", "use_rest_api"]
130
- },
131
127
  "sqlite": {
132
128
  "required": ["database_path"],
133
129
  "optional": ["timeout", "check_same_thread"]
134
130
  },
135
- "mysql": {
136
- "required": ["host", "port", "database", "user", "password"],
137
- "optional": ["charset", "autocommit", "connect_timeout"]
138
- },
139
131
  "mariadb": {
140
132
  "required": ["host", "port", "database", "user", "password"],
141
133
  "optional": ["charset", "autocommit", "connect_timeout"]
@@ -143,14 +135,6 @@ class ThothDbFactory:
143
135
  "sqlserver": {
144
136
  "required": ["server", "database", "user", "password"],
145
137
  "optional": ["driver", "trusted_connection", "timeout"]
146
- },
147
- "oracle": {
148
- "required": ["host", "port", "service_name", "user", "password"],
149
- "optional": ["encoding", "nencoding", "threaded"]
150
- },
151
- "informix": {
152
- "required": ["server", "database", "host", "user", "password"],
153
- "optional": ["protocol", "service", "timeout"]
154
138
  }
155
139
  }
156
140
 
@@ -10,11 +10,8 @@ import warnings
10
10
  # Mapping of database names to their required packages
11
11
  DATABASE_DEPENDENCIES = {
12
12
  'postgresql': ['psycopg2'],
13
- 'mysql': ['mysql.connector'],
14
13
  'mariadb': ['mariadb'],
15
14
  'sqlserver': ['pyodbc'],
16
- 'oracle': ['cx_Oracle'],
17
- 'supabase': ['supabase', 'postgrest', 'gotrue'],
18
15
  'sqlite': [], # Built into Python
19
16
  }
20
17
 
@@ -23,22 +20,16 @@ DATABASE_DEPENDENCIES = {
23
20
  # Mapping of database names to their adapter classes
24
21
  DATABASE_ADAPTERS = {
25
22
  'postgresql': 'thoth_dbmanager.adapters.postgresql.PostgreSQLAdapter',
26
- 'mysql': 'thoth_dbmanager.adapters.mysql.MySQLAdapter',
27
23
  'mariadb': 'thoth_dbmanager.adapters.mariadb.MariaDBAdapter',
28
24
  'sqlserver': 'thoth_dbmanager.adapters.sqlserver.SQLServerAdapter',
29
- 'oracle': 'thoth_dbmanager.adapters.oracle.OracleAdapter',
30
- 'supabase': 'thoth_dbmanager.adapters.supabase.SupabaseAdapter',
31
25
  'sqlite': 'thoth_dbmanager.adapters.sqlite.SQLiteAdapter',
32
26
  }
33
27
 
34
28
  # Mapping of database names to their plugin classes
35
29
  DATABASE_PLUGINS = {
36
30
  'postgresql': 'thoth_dbmanager.plugins.postgresql.PostgreSQLPlugin',
37
- 'mysql': 'thoth_dbmanager.plugins.mysql.MySQLPlugin',
38
31
  'mariadb': 'thoth_dbmanager.plugins.mariadb.MariaDBPlugin',
39
32
  'sqlserver': 'thoth_dbmanager.plugins.sqlserver.SQLServerPlugin',
40
- 'oracle': 'thoth_dbmanager.plugins.oracle.OraclePlugin',
41
- 'supabase': 'thoth_dbmanager.plugins.supabase.SupabasePlugin',
42
33
  'sqlite': 'thoth_dbmanager.plugins.sqlite.SQLitePlugin',
43
34
  }
44
35
 
@@ -5,19 +5,13 @@ Database plugins for Thoth SQL Database Manager.
5
5
  # Import all plugins to ensure they are registered
6
6
  from .postgresql import PostgreSQLPlugin
7
7
  from .sqlite import SQLitePlugin
8
- from .supabase import SupabasePlugin
9
- from .mysql import MySQLPlugin
10
8
  from .mariadb import MariaDBPlugin
11
9
  from .sqlserver import SQLServerPlugin
12
- from .oracle import OraclePlugin
13
10
 
14
11
  # This ensures all plugins are registered when the module is imported
15
12
  __all__ = [
16
13
  "PostgreSQLPlugin",
17
14
  "SQLitePlugin",
18
- "SupabasePlugin",
19
- "MySQLPlugin",
20
15
  "MariaDBPlugin",
21
16
  "SQLServerPlugin",
22
- "OraclePlugin",
23
17
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: thoth_dbmanager
3
- Version: 0.5.0
3
+ Version: 0.5.1
4
4
  Summary: A Python library for managing SQL databases with support for multiple database types, LSH-based similarity search, and a modern plugin architecture.
5
5
  Author-email: Marco Pancotti <mp@tylconsulting.it>
6
6
  Project-URL: Homepage, https://github.com/mptyl/thoth_dbmanager
@@ -9,7 +9,6 @@ Project-URL: Documentation, https://github.com/mptyl/thoth_dbmanager#readme
9
9
  Project-URL: Source Code, https://github.com/mptyl/thoth_dbmanager
10
10
  Keywords: database,sql,lsh,similarity-search,orm
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.8
13
12
  Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
@@ -20,7 +19,7 @@ Classifier: Intended Audience :: Developers
20
19
  Classifier: Topic :: Database
21
20
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
22
21
  Classifier: Development Status :: 4 - Beta
23
- Requires-Python: >=3.8
22
+ Requires-Python: >=3.9
24
23
  Description-Content-Type: text/markdown
25
24
  License-File: LICENSE
26
25
  Requires-Dist: datasketch>=1.5.0
@@ -31,30 +30,15 @@ Requires-Dist: pandas>=1.3.0
31
30
  Requires-Dist: requests>=2.25.0
32
31
  Provides-Extra: postgresql
33
32
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "postgresql"
34
- Provides-Extra: mysql
35
- Requires-Dist: mysql-connector-python>=8.0.0; extra == "mysql"
36
33
  Provides-Extra: mariadb
37
34
  Requires-Dist: mariadb>=1.1.0; extra == "mariadb"
38
35
  Provides-Extra: sqlserver
39
36
  Requires-Dist: pyodbc>=4.0.0; extra == "sqlserver"
40
- Requires-Dist: pymssql>=2.3.0; extra == "sqlserver"
41
- Provides-Extra: oracle
42
- Requires-Dist: cx_Oracle>=8.3.0; extra == "oracle"
43
- Requires-Dist: oracledb>=3.0.0; extra == "oracle"
44
- Provides-Extra: supabase
45
- Requires-Dist: supabase>=2.0.0; extra == "supabase"
46
- Requires-Dist: postgrest-py>=0.10.0; extra == "supabase"
47
- Requires-Dist: gotrue>=1.0.0; extra == "supabase"
48
37
  Provides-Extra: sqlite
49
38
  Provides-Extra: all
50
39
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "all"
51
- Requires-Dist: mysql-connector-python>=8.0.0; extra == "all"
52
40
  Requires-Dist: mariadb>=1.1.0; extra == "all"
53
41
  Requires-Dist: pyodbc>=4.0.0; extra == "all"
54
- Requires-Dist: pymssql>=2.3.0; extra == "all"
55
- Requires-Dist: cx_Oracle>=8.3.0; extra == "all"
56
- Requires-Dist: oracledb>=3.0.0; extra == "all"
57
- Requires-Dist: supabase>=2.0.0; extra == "all"
58
42
  Provides-Extra: dev
59
43
  Requires-Dist: pytest>=7.0.0; extra == "dev"
60
44
  Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
@@ -69,9 +53,12 @@ Requires-Dist: docker>=6.0.0; extra == "dev"
69
53
  Provides-Extra: test-postgresql
70
54
  Requires-Dist: pytest>=7.0.0; extra == "test-postgresql"
71
55
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "test-postgresql"
72
- Provides-Extra: test-mysql
73
- Requires-Dist: pytest>=7.0.0; extra == "test-mysql"
74
- Requires-Dist: mysql-connector-python>=8.0.0; extra == "test-mysql"
56
+ Provides-Extra: test-mariadb
57
+ Requires-Dist: pytest>=7.0.0; extra == "test-mariadb"
58
+ Requires-Dist: mariadb>=1.1.0; extra == "test-mariadb"
59
+ Provides-Extra: test-sqlserver
60
+ Requires-Dist: pytest>=7.0.0; extra == "test-sqlserver"
61
+ Requires-Dist: pyodbc>=4.0.0; extra == "test-sqlserver"
75
62
  Dynamic: license-file
76
63
 
77
64
  # Thoth Database Manager
@@ -88,8 +75,79 @@ A Python library for managing SQL databases with support for multiple database t
88
75
 
89
76
  ## Installation
90
77
 
78
+ ### Basic Installation
79
+
80
+ ```bash
81
+ uv add thoth-dbmanager
82
+ ```
83
+
84
+ ### Installation with Database Support
85
+
86
+ To use specific databases, you'll need to install the corresponding database drivers. You can install them individually or use our convenience extras:
87
+
88
+ #### Install with All Database Support
89
+
90
+ ```bash
91
+ uv add thoth-dbmanager[all]
92
+ ```
93
+
94
+ #### Install with Specific Database Support
95
+
96
+ **PostgreSQL:**
97
+
98
+ ```bash
99
+ uv add thoth-dbmanager[postgresql]
100
+ # or manually: uv add psycopg2-binary
101
+ ```
102
+
103
+ **MySQL:**
104
+
105
+ ```bash
106
+ uv add thoth-dbmanager[mysql]
107
+ # or manually: uv add mysql-connector-python
108
+ ```
109
+
110
+ **MariaDB:**
111
+
112
+ ```bash
113
+ uv add thoth-dbmanager[mariadb]
114
+ # or manually: uv add mariadb
115
+ ```
116
+
117
+ **SQL Server:**
118
+
119
+ ```bash
120
+ uv add thoth-dbmanager[sqlserver]
121
+ # or manually: uv add pyodbc
122
+ ```
123
+
124
+ **Oracle:**
125
+
126
+ ```bash
127
+ uv add thoth-dbmanager[oracle]
128
+ # or manually: uv add cx_Oracle
129
+ ```
130
+
131
+ **Informix:**
132
+
133
+ ```bash
134
+ uv add thoth-dbmanager[informix]
135
+ # or manually: uv add IfxPy
136
+ ```
137
+
138
+ **Supabase:**
139
+
91
140
  ```bash
92
- pip install thoth-dbmanager
141
+ uv add thoth-dbmanager[supabase]
142
+ # or manually: uv add supabase gotrue
143
+ ```
144
+
145
+ **SQLite** is supported out of the box (no additional drivers needed).
146
+
147
+ #### Development Installation
148
+
149
+ ```bash
150
+ uv add thoth-dbmanager[dev]
93
151
  ```
94
152
 
95
153
  ## Quick Start
@@ -278,9 +336,17 @@ if hasattr(manager, 'get_columns_as_documents'):
278
336
  print(f"Primary Key: {doc.is_pk}")
279
337
  ```
280
338
 
281
- ## Configuration Examples
339
+ ## Database Connection Examples
282
340
 
283
341
  ### PostgreSQL
342
+
343
+ **Installation:**
344
+
345
+ ```bash
346
+ uv add thoth-dbmanager[postgresql]
347
+ ```
348
+
349
+ **Usage:**
284
350
  ```python
285
351
  manager = ThothDbManager.get_instance(
286
352
  db_type="postgresql",
@@ -294,7 +360,63 @@ manager = ThothDbManager.get_instance(
294
360
  )
295
361
  ```
296
362
 
363
+ ### MySQL
364
+
365
+ **Installation:**
366
+
367
+ ```bash
368
+ uv add thoth-dbmanager[mysql]
369
+ ```
370
+
371
+ **Usage:**
372
+
373
+ ```python
374
+ manager = ThothDbManager.get_instance(
375
+ db_type="mysql",
376
+ db_root_path="./data",
377
+ db_mode="production",
378
+ host="localhost",
379
+ port=3306,
380
+ database="myapp",
381
+ user="dbuser",
382
+ password="dbpass"
383
+ )
384
+ ```
385
+
386
+ ### MariaDB
387
+
388
+ **Installation:**
389
+
390
+ ```bash
391
+ uv add thoth-dbmanager[mariadb]
392
+ ```
393
+
394
+ **Usage:**
395
+
396
+ ```python
397
+ manager = ThothDbManager.get_instance(
398
+ db_type="mariadb",
399
+ db_root_path="./data",
400
+ db_mode="production",
401
+ host="localhost",
402
+ port=3306,
403
+ database="myapp",
404
+ user="dbuser",
405
+ password="dbpass"
406
+ )
407
+ ```
408
+
297
409
  ### SQLite
410
+
411
+ **Installation:**
412
+
413
+ ```bash
414
+ # No additional drivers needed - SQLite is included with Python
415
+ uv add thoth-dbmanager
416
+ ```
417
+
418
+ **Usage:**
419
+
298
420
  ```python
299
421
  manager = ThothDbManager.get_instance(
300
422
  db_type="sqlite",
@@ -304,20 +426,99 @@ manager = ThothDbManager.get_instance(
304
426
  )
305
427
  ```
306
428
 
307
- ### MySQL/MariaDB
429
+ ### SQL Server
430
+
431
+ **Installation:**
432
+
433
+ ```bash
434
+ uv add thoth-dbmanager[sqlserver]
435
+ ```
436
+
437
+ **Usage:**
438
+
439
+ ```python
440
+ manager = ThothDbManager.get_instance(
441
+ db_type="sqlserver",
442
+ db_root_path="./data",
443
+ db_mode="production",
444
+ server="localhost",
445
+ database="myapp",
446
+ user="dbuser",
447
+ password="dbpass"
448
+ )
449
+ ```
450
+
451
+ ### Oracle
452
+
453
+ **Installation:**
454
+
455
+ ```bash
456
+ uv add thoth-dbmanager[oracle]
457
+ ```
458
+
459
+ **Usage:**
460
+
308
461
  ```python
309
462
  manager = ThothDbManager.get_instance(
310
- db_type="mysql", # or "mariadb"
463
+ db_type="oracle",
311
464
  db_root_path="./data",
312
465
  db_mode="production",
313
466
  host="localhost",
314
- port=3306,
467
+ port=1521,
468
+ service_name="ORCL",
469
+ user="dbuser",
470
+ password="dbpass"
471
+ )
472
+ ```
473
+
474
+ ### Informix
475
+
476
+ **Installation:**
477
+
478
+ ```bash
479
+ uv add thoth-dbmanager[informix]
480
+ ```
481
+
482
+ **Usage:**
483
+
484
+ ```python
485
+ manager = ThothDbManager.get_instance(
486
+ db_type="informix",
487
+ db_root_path="./data",
488
+ db_mode="production",
489
+ server="informix_server",
315
490
  database="myapp",
491
+ host="localhost",
316
492
  user="dbuser",
317
493
  password="dbpass"
318
494
  )
319
495
  ```
320
496
 
497
+ ### Supabase
498
+
499
+ **Installation:**
500
+
501
+ ```bash
502
+ uv add thoth-dbmanager[supabase]
503
+ ```
504
+
505
+ **Usage:**
506
+
507
+ ```python
508
+ manager = ThothDbManager.get_instance(
509
+ db_type="supabase",
510
+ db_root_path="./data",
511
+ db_mode="production",
512
+ host="db.example.supabase.co",
513
+ port=5432,
514
+ database="postgres",
515
+ user="postgres",
516
+ password="your_password",
517
+ project_url="https://your-project.supabase.co",
518
+ api_key="your_supabase_api_key"
519
+ )
520
+ ```
521
+
321
522
  ## Error Handling
322
523
 
323
524
  The library provides clear error messages for common issues:
@@ -1,17 +1,14 @@
1
1
  thoth_dbmanager/ThothDbManager.py,sha256=q-jctgt3MJCDFzq6icQdP1oLeVy1ypg402F4ybxhG8c,8943
2
2
  thoth_dbmanager/__init__.py,sha256=Qrd9n7YYMkNKCFiIkzWbjKf5LNOkfp4TkebEpsKqt7E,1655
3
3
  thoth_dbmanager/documents.py,sha256=z-f7zo_CZHqoGM0qHT8-lSUx4NhnMNZTSajpoFtRxn4,5051
4
- thoth_dbmanager/dynamic_imports.py,sha256=nqMmxl2KeczAK-Bi5Fq92f3rPpPsTay-Bq553iHFbWI,7507
5
- thoth_dbmanager/adapters/__init__.py,sha256=tKIMlo9-gbH_cqnqZJ9yw1zQZKUzsV4hljDUNzcoZXg,486
4
+ thoth_dbmanager/dynamic_imports.py,sha256=xDahgiqKvwSYqjPgHiQqD1XPhAbM_JqnU3OhBp2N-fc,7013
5
+ thoth_dbmanager/adapters/__init__.py,sha256=Ua3ZjSOFlP9kVMFTiC6fyrpcv327b_mBimQ_4fnUsGY,318
6
6
  thoth_dbmanager/adapters/mariadb.py,sha256=LTsf0gORiwqZkd6WtKcOsYLHyDgysxdqNesBscbJwNs,5709
7
- thoth_dbmanager/adapters/mysql.py,sha256=TrFbxoMMNWbmUcgkKQYOIfsstmMUmuLlGB7R4ZFEIYI,5698
8
- thoth_dbmanager/adapters/oracle.py,sha256=JSrsgohjz5PbVc8nI188MZ4QGBQls4ieNmwWfAKA7II,21468
9
7
  thoth_dbmanager/adapters/postgresql.py,sha256=qxdlxOV7Nvn8U4Lhat50w87Z2S8AzBfmLfEwKfz7dis,17299
10
8
  thoth_dbmanager/adapters/sqlite.py,sha256=RTDszgnAtkE14LKFeoe9lBHgsqXqkmDk6jDCTmVpnoM,14659
11
9
  thoth_dbmanager/adapters/sqlserver.py,sha256=V555kUH54Fb1Atow0BfvbSHmoSwGnrB_RJGn718VQSI,23880
12
- thoth_dbmanager/adapters/supabase.py,sha256=bl2C6LpOpykPF3vIbdNRDk43aXLADzSk0wQuwTcEHZA,10348
13
10
  thoth_dbmanager/core/__init__.py,sha256=FlqNW0GZNv1rnwNgyXGzveLqaw0Z90y5AKhR_1DvHBE,269
14
- thoth_dbmanager/core/factory.py,sha256=sLj8tKI1ADqSlnU5F0NRtHHtpSimnATuwAqUYx5dfxI,9694
11
+ thoth_dbmanager/core/factory.py,sha256=84EeZYRoH7y7b19EFHqN4X0CSA6dv-0yxUmlX2zHETk,8840
15
12
  thoth_dbmanager/core/interfaces.py,sha256=wZpKVQJdwMlAsHTQMB7yVviD2-N_dlOe19F-GhgEoGE,9576
16
13
  thoth_dbmanager/core/registry.py,sha256=url4qpQMoMw4rDrdAAvV6L7-NdO4z86xSJPSwTH_l5g,8624
17
14
  thoth_dbmanager/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -24,16 +21,13 @@ thoth_dbmanager/lsh/core.py,sha256=171FqHW7ItAqAPk6g_AoayKTE3Bs1rRZxnt55MJVzjY,6
24
21
  thoth_dbmanager/lsh/factory.py,sha256=2Bpkk-OygjaptZAw1yysxO1cxG3QTxmJ1yFGcXHqX3w,2411
25
22
  thoth_dbmanager/lsh/manager.py,sha256=LGrKbGKiBuISlNXaU4Yxfc_BqJfN27MaXapJbzEAjJQ,6513
26
23
  thoth_dbmanager/lsh/storage.py,sha256=qei6fwpmRCBSS8CRtDlnZCuWEmyuOK9gVSTkEJdX0eI,4543
27
- thoth_dbmanager/plugins/__init__.py,sha256=98iKwNiKnFFeJfw0qLGVOrP2Mo2wGPAolsx7R2B3emA,592
24
+ thoth_dbmanager/plugins/__init__.py,sha256=KiamB8UgZujwLUE8Q5suYgqC2i5VEAdmC1m0KF9GgvM,430
28
25
  thoth_dbmanager/plugins/mariadb.py,sha256=ElYa4Rexwrofcjcs0UQKan8fZpbU6-n9zghYR9SgRb4,17975
29
- thoth_dbmanager/plugins/mysql.py,sha256=mbDsIDV2H_BWYANU4JHMsUkxLQICuGtjKTTPbig2Ngs,16546
30
- thoth_dbmanager/plugins/oracle.py,sha256=k4Yxvz5MdsH3Sfty9lxbhr8igSnHvGbGujz3bLpNcHo,5230
31
26
  thoth_dbmanager/plugins/postgresql.py,sha256=pI1W9oHpQty8tHMoEDcsOT-Msv6S4aoFcArOGFxLR7Q,5518
32
27
  thoth_dbmanager/plugins/sqlite.py,sha256=B-9ATDQacaBHbQTexWNeJo1_F2k1z6JrsApiYI_3FgM,8853
33
28
  thoth_dbmanager/plugins/sqlserver.py,sha256=mMb3F5FmSWV02FZwj-Ult-2TjuyeVA4Fl1iME1dbgLU,5289
34
- thoth_dbmanager/plugins/supabase.py,sha256=mWlaGAdpywx4-pU4Ffpmn24ze8sg0sM5kc6bFDoeYRg,8645
35
- thoth_dbmanager-0.5.0.dist-info/licenses/LICENSE,sha256=81-BOzGgwtY1XdYfkwMQB87AkOGXI9OMq0kjNcZA4UE,1071
36
- thoth_dbmanager-0.5.0.dist-info/METADATA,sha256=WbpRrYaYFg0H_EOUPPsjMfsTmuhuMvPSGI50jQthJLM,12246
37
- thoth_dbmanager-0.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
38
- thoth_dbmanager-0.5.0.dist-info/top_level.txt,sha256=b9ttxm9RUc0KUCASEKRx6FqoREYJ1-KZWSpNuaM0uQ4,16
39
- thoth_dbmanager-0.5.0.dist-info/RECORD,,
29
+ thoth_dbmanager-0.5.1.dist-info/licenses/LICENSE,sha256=81-BOzGgwtY1XdYfkwMQB87AkOGXI9OMq0kjNcZA4UE,1071
30
+ thoth_dbmanager-0.5.1.dist-info/METADATA,sha256=WwtN_HnMRIqWZBT4L9yjHLY56q6B9pRDk1PoJ24QNoQ,14781
31
+ thoth_dbmanager-0.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
32
+ thoth_dbmanager-0.5.1.dist-info/top_level.txt,sha256=b9ttxm9RUc0KUCASEKRx6FqoREYJ1-KZWSpNuaM0uQ4,16
33
+ thoth_dbmanager-0.5.1.dist-info/RECORD,,
@@ -1,165 +0,0 @@
1
- """
2
- MySQL adapter for Thoth SQL Database Manager.
3
- """
4
-
5
- from typing import Any, Dict, List, Optional, Union
6
- from sqlalchemy import create_engine, text
7
- from sqlalchemy.engine import Engine
8
- from sqlalchemy.exc import SQLAlchemyError
9
-
10
- from ..core.interfaces import DbAdapter
11
-
12
-
13
- class MySQLAdapter(DbAdapter):
14
- """MySQL database adapter."""
15
-
16
- def __init__(self, connection_string: str, **kwargs: Any) -> None:
17
- """
18
- Initialize MySQL adapter.
19
-
20
- Args:
21
- connection_string: MySQL connection string
22
- **kwargs: Additional connection parameters
23
- """
24
- self.connection_string = connection_string
25
- self.engine = None
26
- self.connection_params = kwargs
27
-
28
- def connect(self) -> None:
29
- """Establish database connection."""
30
- try:
31
- self.engine = create_engine(
32
- self.connection_string,
33
- pool_pre_ping=True,
34
- **self.connection_params
35
- )
36
- except Exception as e:
37
- raise ConnectionError(f"Failed to connect to MySQL: {e}")
38
-
39
- def disconnect(self) -> None:
40
- """Close database connection."""
41
- if self.engine:
42
- self.engine.dispose()
43
- self.engine = None
44
-
45
- def execute_query(self, query: str, params: Optional[Dict[str, Any]] = None) -> List[Dict[str, Any]]:
46
- """Execute a query and return results."""
47
- if not self.engine:
48
- self.connect()
49
-
50
- try:
51
- with self.engine.connect() as conn:
52
- result = conn.execute(text(query), params or {})
53
- return [dict(row._mapping) for row in result]
54
- except SQLAlchemyError as e:
55
- raise RuntimeError(f"MySQL query failed: {e}")
56
-
57
- def execute_update(self, query: str, params: Optional[Dict[str, Any]] = None) -> int:
58
- """Execute an update query and return affected row count."""
59
- if not self.engine:
60
- self.connect()
61
-
62
- try:
63
- with self.engine.connect() as conn:
64
- result = conn.execute(text(query), params or {})
65
- conn.commit()
66
- return result.rowcount
67
- except SQLAlchemyError as e:
68
- raise RuntimeError(f"MySQL update failed: {e}")
69
-
70
- def get_tables(self) -> List[str]:
71
- """Get list of tables in the database."""
72
- query = "SHOW TABLES"
73
- result = self.execute_query(query)
74
- return [list(row.values())[0] for row in result]
75
-
76
- def get_table_schema(self, table_name: str) -> Dict[str, Any]:
77
- """Get schema information for a specific table."""
78
- query = f"DESCRIBE {table_name}"
79
- columns = self.execute_query(query)
80
-
81
- schema = {
82
- 'table_name': table_name,
83
- 'columns': []
84
- }
85
-
86
- for col in columns:
87
- schema['columns'].append({
88
- 'name': col['Field'],
89
- 'type': col['Type'],
90
- 'nullable': col['Null'] == 'YES',
91
- 'default': col['Default'],
92
- 'primary_key': col['Key'] == 'PRI'
93
- })
94
-
95
- return schema
96
-
97
- def get_indexes(self, table_name: str) -> List[Dict[str, Any]]:
98
- """Get index information for a table."""
99
- query = f"SHOW INDEX FROM {table_name}"
100
- indexes = self.execute_query(query)
101
-
102
- result = []
103
- for idx in indexes:
104
- result.append({
105
- 'name': idx['Key_name'],
106
- 'column': idx['Column_name'],
107
- 'unique': not idx['Non_unique'],
108
- 'type': idx['Index_type']
109
- })
110
-
111
- return result
112
-
113
- def get_foreign_keys(self, table_name: str) -> List[Dict[str, Any]]:
114
- """Get foreign key information for a table."""
115
- query = f"""
116
- SELECT
117
- CONSTRAINT_NAME as name,
118
- COLUMN_NAME as column_name,
119
- REFERENCED_TABLE_NAME as referenced_table,
120
- REFERENCED_COLUMN_NAME as referenced_column
121
- FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
122
- WHERE TABLE_NAME = '{table_name}'
123
- AND REFERENCED_TABLE_NAME IS NOT NULL
124
- """
125
-
126
- return self.execute_query(query)
127
-
128
- def create_table(self, table_name: str, schema: Dict[str, Any]) -> None:
129
- """Create a new table with the given schema."""
130
- columns = []
131
- for col in schema.get('columns', []):
132
- col_def = f"{col['name']} {col['type']}"
133
- if not col.get('nullable', True):
134
- col_def += " NOT NULL"
135
- if col.get('default') is not None:
136
- col_def += f" DEFAULT {col['default']}"
137
- if col.get('primary_key'):
138
- col_def += " PRIMARY KEY"
139
- columns.append(col_def)
140
-
141
- query = f"CREATE TABLE {table_name} ({', '.join(columns)})"
142
- self.execute_update(query)
143
-
144
- def drop_table(self, table_name: str) -> None:
145
- """Drop a table."""
146
- query = f"DROP TABLE IF EXISTS {table_name}"
147
- self.execute_update(query)
148
-
149
- def table_exists(self, table_name: str) -> bool:
150
- """Check if a table exists."""
151
- query = f"""
152
- SELECT COUNT(*) as count
153
- FROM INFORMATION_SCHEMA.TABLES
154
- WHERE TABLE_NAME = '{table_name}'
155
- """
156
- result = self.execute_query(query)
157
- return result[0]['count'] > 0
158
-
159
- def get_connection_info(self) -> Dict[str, Any]:
160
- """Get connection information."""
161
- return {
162
- 'type': 'mysql',
163
- 'connection_string': self.connection_string,
164
- 'connected': self.engine is not None
165
- }