lesscode-database 0.0.9__tar.gz → 0.0.11__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.
- lesscode_database-0.0.9/README.md → lesscode_database-0.0.11/PKG-INFO +24 -1
- lesscode_database-0.0.9/PKG-INFO → lesscode_database-0.0.11/README.md +11 -14
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/connect_pool.py +104 -26
- lesscode_database-0.0.11/lesscode_database/version.py +1 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/PKG-INFO +12 -2
- lesscode_database-0.0.9/lesscode_database/version.py +0 -1
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/LICENSE +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/__init__.py +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/connection_info.py +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/db_options.py +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/db_request.py +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/ds_helper.py +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/dynamic_import_package.py +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/mongo_base_model.py +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/SOURCES.txt +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/dependency_links.txt +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/top_level.txt +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/setup.cfg +0 -0
- {lesscode_database-0.0.9 → lesscode_database-0.0.11}/setup.py +0 -0
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: lesscode_database
|
|
3
|
+
Version: 0.0.11
|
|
4
|
+
Summary: lesscode_database是数据库连接工具包
|
|
5
|
+
Author: navysummer
|
|
6
|
+
Author-email: navysummer@yeah.net
|
|
7
|
+
Platform: python
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.6
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
|
|
1
14
|
# lesscode_database
|
|
2
15
|
|
|
3
16
|
数据库连接工具包
|
|
@@ -44,13 +57,15 @@ db_options.conn_list = [
|
|
|
44
57
|
ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
|
|
45
58
|
password=None, db_name=1, enable=False, async_enable=True),
|
|
46
59
|
# sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
|
|
47
|
-
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
|
|
60
|
+
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle,dm
|
|
48
61
|
ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
|
|
49
62
|
password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
|
|
50
63
|
ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
|
|
51
64
|
password="neo4j", db_name=None, enable=False, async_enable=True),
|
|
52
65
|
ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
|
|
53
66
|
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
67
|
+
ConnectionInfo(dialect="dm", name="dm", dsn=None, host="127.0.0.1", port=5236,
|
|
68
|
+
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
54
69
|
|
|
55
70
|
]
|
|
56
71
|
|
|
@@ -345,4 +360,12 @@ async def async_esapi_test():
|
|
|
345
360
|
loop = asyncio.get_event_loop()
|
|
346
361
|
loop.run_until_complete(async_esapi_test())
|
|
347
362
|
|
|
363
|
+
|
|
364
|
+
# 达梦数据库 同步测试
|
|
365
|
+
with DsHelper("dm").pool.dedicated_connection() as conn:
|
|
366
|
+
with conn.cursor() as cursor:
|
|
367
|
+
cursor.execute('SELECT 1')
|
|
368
|
+
print(cursor.fetchall())
|
|
369
|
+
|
|
370
|
+
|
|
348
371
|
```
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: lesscode_database
|
|
3
|
-
Version: 0.0.9
|
|
4
|
-
Summary: lesscode_database是数据库连接工具包
|
|
5
|
-
Author: navysummer
|
|
6
|
-
Author-email: navysummer@yeah.net
|
|
7
|
-
Platform: python
|
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: Operating System :: OS Independent
|
|
10
|
-
Requires-Python: >=3.6
|
|
11
|
-
Description-Content-Type: text/markdown
|
|
12
|
-
License-File: LICENSE
|
|
13
|
-
|
|
14
1
|
# lesscode_database
|
|
15
2
|
|
|
16
3
|
数据库连接工具包
|
|
@@ -57,13 +44,15 @@ db_options.conn_list = [
|
|
|
57
44
|
ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
|
|
58
45
|
password=None, db_name=1, enable=False, async_enable=True),
|
|
59
46
|
# sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
|
|
60
|
-
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
|
|
47
|
+
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle,dm
|
|
61
48
|
ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
|
|
62
49
|
password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
|
|
63
50
|
ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
|
|
64
51
|
password="neo4j", db_name=None, enable=False, async_enable=True),
|
|
65
52
|
ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
|
|
66
53
|
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
54
|
+
ConnectionInfo(dialect="dm", name="dm", dsn=None, host="127.0.0.1", port=5236,
|
|
55
|
+
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
67
56
|
|
|
68
57
|
]
|
|
69
58
|
|
|
@@ -358,4 +347,12 @@ async def async_esapi_test():
|
|
|
358
347
|
loop = asyncio.get_event_loop()
|
|
359
348
|
loop.run_until_complete(async_esapi_test())
|
|
360
349
|
|
|
350
|
+
|
|
351
|
+
# 达梦数据库 同步测试
|
|
352
|
+
with DsHelper("dm").pool.dedicated_connection() as conn:
|
|
353
|
+
with conn.cursor() as cursor:
|
|
354
|
+
cursor.execute('SELECT 1')
|
|
355
|
+
print(cursor.fetchall())
|
|
356
|
+
|
|
357
|
+
|
|
361
358
|
```
|
|
@@ -3,6 +3,7 @@ import asyncio
|
|
|
3
3
|
import importlib
|
|
4
4
|
import ssl
|
|
5
5
|
from inspect import iscoroutine
|
|
6
|
+
from xml.sax import parse
|
|
6
7
|
|
|
7
8
|
from lesscode_database.connection_info import ConnectionInfo
|
|
8
9
|
from lesscode_database.db_request import get_basic_auth
|
|
@@ -644,33 +645,92 @@ class Pool:
|
|
|
644
645
|
|
|
645
646
|
@staticmethod
|
|
646
647
|
async def create_clickhouse_pool(conn_info: ConnectionInfo):
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
648
|
+
|
|
649
|
+
params = conn_info.params if conn_info.params else {}
|
|
650
|
+
creator_type = params.pop("creator_type","asynch")
|
|
651
|
+
if creator_type == "clickhouse_connect":
|
|
652
|
+
try:
|
|
653
|
+
clickhouse_connect = importlib.import_module("clickhouse_connect")
|
|
654
|
+
except ImportError:
|
|
655
|
+
raise Exception(f"DBUtils is not exist,run:pip install clickhouse_connect==0.8.6")
|
|
656
|
+
pool = await clickhouse_connect.get_async_client(host=conn_info.host, port=conn_info.port,
|
|
657
|
+
username=conn_info.user,
|
|
658
|
+
password=conn_info.password, database=conn_info.db_name,
|
|
659
|
+
**params)
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
else:
|
|
663
|
+
try:
|
|
664
|
+
asynch = importlib.import_module("asynch")
|
|
665
|
+
except ImportError:
|
|
666
|
+
raise ImportError(f"asynch is not exist,run:pip install asynch")
|
|
667
|
+
pool = await asynch.create_pool(minsize=conn_info.min_size, maxsize=conn_info.max_size,
|
|
668
|
+
dsn=conn_info.dsn, host=conn_info.host,
|
|
669
|
+
user=conn_info.user, password=conn_info.password,
|
|
670
|
+
port=conn_info.port, database=conn_info.db_name)
|
|
655
671
|
return pool
|
|
656
672
|
|
|
657
673
|
@staticmethod
|
|
658
674
|
def sync_create_clickhouse_pool(conn_info: ConnectionInfo):
|
|
675
|
+
params = conn_info.params if conn_info.params else {}
|
|
676
|
+
creator_type = params.pop("creator_type", "clickhouse_driver")
|
|
677
|
+
if creator_type == "clickhouse_connect":
|
|
678
|
+
try:
|
|
679
|
+
clickhouse_connect = importlib.import_module("clickhouse_connect")
|
|
680
|
+
except ImportError:
|
|
681
|
+
raise Exception(f"DBUtils is not exist,run:pip install clickhouse_connect==0.6.23")
|
|
682
|
+
params = conn_info.params
|
|
683
|
+
if not params:
|
|
684
|
+
params = dict()
|
|
685
|
+
pool = clickhouse_connect.get_client(host=conn_info.host, port=conn_info.port, username=conn_info.user,
|
|
686
|
+
password=conn_info.password, database=conn_info.db_name, **params)
|
|
687
|
+
else:
|
|
688
|
+
try:
|
|
689
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
690
|
+
except ImportError:
|
|
691
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils==3.0.2")
|
|
692
|
+
try:
|
|
693
|
+
clickhouse_driver = importlib.import_module("clickhouse_driver")
|
|
694
|
+
except ImportError:
|
|
695
|
+
raise Exception(f"clickhouse_driver is not exist,run:pip install clickhouse_driver")
|
|
696
|
+
params = conn_info.params
|
|
697
|
+
if not isinstance(params, dict):
|
|
698
|
+
params = dict()
|
|
699
|
+
|
|
700
|
+
pool = pooled_db.PooledDB(creator=clickhouse_driver.connect, host=conn_info.host, port=conn_info.port,
|
|
701
|
+
user=conn_info.user,
|
|
702
|
+
password=conn_info.password, database=conn_info.db_name or "default",
|
|
703
|
+
**params)
|
|
704
|
+
|
|
705
|
+
return pool
|
|
706
|
+
|
|
707
|
+
@staticmethod
|
|
708
|
+
def sync_create_dm_pool(conn_info: ConnectionInfo):
|
|
659
709
|
try:
|
|
660
|
-
|
|
710
|
+
dmPython = importlib.import_module("dmPython")
|
|
661
711
|
except ImportError:
|
|
662
|
-
raise Exception(f"
|
|
712
|
+
raise Exception(f"dmPython is not exist,run:pip install dmPython")
|
|
663
713
|
try:
|
|
664
|
-
|
|
714
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
665
715
|
except ImportError:
|
|
666
|
-
raise Exception(f"
|
|
716
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils==3.0.2")
|
|
667
717
|
params = conn_info.params
|
|
668
718
|
if not isinstance(params, dict):
|
|
669
719
|
params = dict()
|
|
670
|
-
|
|
671
|
-
|
|
720
|
+
blocking = params.pop("blocking", True)
|
|
721
|
+
mincached = params.pop("mincached", conn_info.min_size)
|
|
722
|
+
maxusage = params.pop("maxusage", conn_info.min_size)
|
|
723
|
+
maxshared = params.pop("maxshared", conn_info.max_size)
|
|
724
|
+
maxcached = params.pop("maxcached", conn_info.max_size)
|
|
725
|
+
ping = params.pop("ping", 1)
|
|
726
|
+
autocommit = params.pop("autocommit", True)
|
|
727
|
+
pool = pooled_db.PooledDB(creator=dmPython, host=conn_info.host, port=conn_info.port,
|
|
672
728
|
user=conn_info.user,
|
|
673
|
-
password=conn_info.password,
|
|
729
|
+
password=conn_info.password, schema=conn_info.db_name,
|
|
730
|
+
mincached=mincached, blocking=blocking, maxusage=maxusage,
|
|
731
|
+
maxshared=maxshared, maxcached=maxcached,
|
|
732
|
+
ping=ping, maxconnections=conn_info.max_size,
|
|
733
|
+
autoCommit=autocommit,
|
|
674
734
|
**params)
|
|
675
735
|
return pool
|
|
676
736
|
|
|
@@ -734,10 +794,10 @@ class Pool:
|
|
|
734
794
|
:param conn_info: 连接信息
|
|
735
795
|
:return:
|
|
736
796
|
"""
|
|
797
|
+
db_type = "mysql"
|
|
737
798
|
if conn_info.dsn:
|
|
738
799
|
url = conn_info.dsn
|
|
739
800
|
else:
|
|
740
|
-
db_type = "mysql"
|
|
741
801
|
if conn_info.params:
|
|
742
802
|
if conn_info.params.get("db_type"):
|
|
743
803
|
db_type = conn_info.params.pop("db_type")
|
|
@@ -771,23 +831,35 @@ class Pool:
|
|
|
771
831
|
url = "oracle+cx_oracle://{}:{}@{}:{}/{}?charset=utf8mb4".format(
|
|
772
832
|
conn_info.user, conn_info.password, conn_info.host, conn_info.port,
|
|
773
833
|
conn_info.db_name)
|
|
834
|
+
elif db_type == "dm":
|
|
835
|
+
url = 'dm+dmPython://{}:{}@{}:{}'.format(
|
|
836
|
+
conn_info.user, conn_info.password, conn_info.host, conn_info.port)
|
|
774
837
|
else:
|
|
775
838
|
raise ImportError("UNSUPPORTED DB TYPE")
|
|
776
839
|
try:
|
|
777
840
|
sqlalchemy = importlib.import_module("sqlalchemy")
|
|
778
841
|
except ImportError:
|
|
779
842
|
raise ImportError(f"sqlalchemy is not exist,run:pip install sqlalchemy")
|
|
780
|
-
|
|
781
|
-
|
|
843
|
+
params = conn_info.params
|
|
844
|
+
if not params:
|
|
845
|
+
params = dict()
|
|
846
|
+
echo = params.pop("echo", True)
|
|
847
|
+
pool_recycle = params.pop("pool_recycle", 3600)
|
|
848
|
+
max_overflow = params.pop("max_overflow", 0)
|
|
849
|
+
pool_timeout = params.pop("pool_timeout", 10)
|
|
850
|
+
pool_pre_ping = params.pop("pool_pre_ping", False)
|
|
851
|
+
if conn_info.db_name and db_type=="dm":
|
|
852
|
+
if "connect_args" not in params:
|
|
853
|
+
params["connect_args"] = {"schema": conn_info.db_name}
|
|
854
|
+
else:
|
|
855
|
+
params["connect_args"]["schema"] = conn_info.db_name
|
|
856
|
+
|
|
857
|
+
engine = sqlalchemy.create_engine(url, echo=echo,
|
|
782
858
|
pool_size=conn_info.min_size,
|
|
783
|
-
pool_recycle=
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
pool_timeout=conn_info.params.get("pool_timeout",
|
|
788
|
-
10) if conn_info.params else 10,
|
|
789
|
-
pool_pre_ping=conn_info.params.get("pool_pre_ping",
|
|
790
|
-
True) if conn_info.params else True)
|
|
859
|
+
pool_recycle=pool_recycle,
|
|
860
|
+
max_overflow=max_overflow,
|
|
861
|
+
pool_timeout=pool_timeout,
|
|
862
|
+
pool_pre_ping=pool_pre_ping)
|
|
791
863
|
return engine
|
|
792
864
|
|
|
793
865
|
@staticmethod
|
|
@@ -939,6 +1011,12 @@ def get_pool(conn_info: ConnectionInfo):
|
|
|
939
1011
|
else:
|
|
940
1012
|
return run_sync(Pool.sync_create_clickhouse_pool(conn_info)), conn_info
|
|
941
1013
|
|
|
1014
|
+
elif conn_info.dialect == "dm":
|
|
1015
|
+
if conn_info.async_enable:
|
|
1016
|
+
return run_sync(Pool.sync_create_dm_pool(conn_info)), conn_info
|
|
1017
|
+
else:
|
|
1018
|
+
return run_sync(Pool.sync_create_dm_pool(conn_info)), conn_info
|
|
1019
|
+
|
|
942
1020
|
elif conn_info.dialect == "sqlalchemy":
|
|
943
1021
|
if conn_info.async_enable:
|
|
944
1022
|
return run_sync(Pool.create_sqlalchemy_pool(conn_info)), conn_info
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.11"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lesscode-database
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.11
|
|
4
4
|
Summary: lesscode_database是数据库连接工具包
|
|
5
5
|
Author: navysummer
|
|
6
6
|
Author-email: navysummer@yeah.net
|
|
@@ -57,13 +57,15 @@ db_options.conn_list = [
|
|
|
57
57
|
ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
|
|
58
58
|
password=None, db_name=1, enable=False, async_enable=True),
|
|
59
59
|
# sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
|
|
60
|
-
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
|
|
60
|
+
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle,dm
|
|
61
61
|
ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
|
|
62
62
|
password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
|
|
63
63
|
ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
|
|
64
64
|
password="neo4j", db_name=None, enable=False, async_enable=True),
|
|
65
65
|
ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
|
|
66
66
|
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
67
|
+
ConnectionInfo(dialect="dm", name="dm", dsn=None, host="127.0.0.1", port=5236,
|
|
68
|
+
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
67
69
|
|
|
68
70
|
]
|
|
69
71
|
|
|
@@ -358,4 +360,12 @@ async def async_esapi_test():
|
|
|
358
360
|
loop = asyncio.get_event_loop()
|
|
359
361
|
loop.run_until_complete(async_esapi_test())
|
|
360
362
|
|
|
363
|
+
|
|
364
|
+
# 达梦数据库 同步测试
|
|
365
|
+
with DsHelper("dm").pool.dedicated_connection() as conn:
|
|
366
|
+
with conn.cursor() as cursor:
|
|
367
|
+
cursor.execute('SELECT 1')
|
|
368
|
+
print(cursor.fetchall())
|
|
369
|
+
|
|
370
|
+
|
|
361
371
|
```
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.9"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/dynamic_import_package.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|